在android中的一个Activity中添加两个片段

Posted

技术标签:

【中文标题】在android中的一个Activity中添加两个片段【英文标题】:Add two fragments in one Activity in android 【发布时间】:2017-05-24 02:03:24 【问题描述】:

我想在 android 的一个 Activity 中添加两个片段。但是在添加时,它给出了错误;

java.lang.RuntimeException: Unable to start activity ComponentInfocom.example.namal.fragments/com.example.namal.fragments.MainActivity: android.view.InflateException: Binary XML file line #10: Error inflating class分段 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2695) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769) 在 android.app.ActivityThread.access$900(ActivityThread.java:177) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5910) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 原因:android.view.InflateException: Binary XML file line #10: Error inflating class fragment 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:504) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在 android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284) 在 android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 在 com.example.namal.fragments.MainActivity.onCreate(MainActivity.java:14) 在 android.app.Activity.performCreate(Activity.java:6178) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2648) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769) 在 android.app.ActivityThread.access$900(ActivityThread.java:177) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5910) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 引起:java.lang.RuntimeException: com.example.namal.fragments.MainActivity@1602e5b8 必须实现 OnFragmentInteractionListener 在 com.example.namal.fragments.Pie1.onAttach(Pie1.java:83) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1043) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1268) 在 android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1370) 在 android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2415) 在 android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120) 在 android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:376) 在 android.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:33) 在 android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:75) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:504) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:414) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:365) 在 android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284) 在 android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 在 com.example.namal.fragments.MainActivity.onCreate(MainActivity.java:14) 在 android.app.Activity.performCreate(Activity.java:6178) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2648) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769) 在 android.app.ActivityThread.access$900(ActivityThread.java:177) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5910) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_
    android:layout_
    tools:context="com.example.namal.fragments.MainActivity">


    <fragment
        android:layout_
        android:layout_
        android:name="com.example.namal.fragments.Pie1"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="37dp"
        android:layout_marginBottom="20dp"
        android:id="@+id/fragment" />

    <fragment
        android:layout_
        android:layout_
        android:name="com.example.namal.fragments.Pie2"
        android:layout_below="@+id/fragment"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:id="@+id/fragment2" />
</RelativeLayout>

MainAvtivity.java

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Pie1 firstFragment = new Pie1();

        FragmentManager fm = getSupportFragmentManager();
        Fragment fragment = fm.findFragmentById(R.id.activity_main);

        if (fragment == null) 
            fm.beginTransaction()
                    .add(R.id.fragment, firstFragment)
                    .commit();

            Pie2 secondFragment = new Pie2();
            fm.beginTransaction()
                    .add(R.id.fragment2, secondFragment)
                    .commit();
        
    

Fragment1的布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:background="@color/colorAccent"
   >

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_
        android:layout_
        android:text="@string/hello_blank_fragment" />

    <TextView
        android:layout_
        android:layout_
        android:text="hello_blank_fragment 2" />

    <TextView
        android:layout_
        android:layout_
        android:text="hello_blank_fragment 3" />

    <TextView
        android:layout_
        android:layout_
        android:text="hello_blank_fragment 4" />

</FrameLayout>

Fragment 2的布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:background="@color/colorPrimaryDark"
    tools:context="com.example.namal.fragments.Pie2">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_
        android:layout_
        android:text="hello_blank_fragment 5" />

    <TextView
        android:layout_
        android:layout_
        android:text="hello_blank_fragment 6" />

    <TextView
        android:layout_
        android:layout_
        android:text="hello_blank_fragment 7" />

    <TextView
        android:layout_
        android:layout_
        android:text="hello_blank_fragment 8" />

</FrameLayout>

【问题讨论】:

【参考方案1】:
Caused by: java.lang.RuntimeException:
    com.example.namal.fragments.MainActivity@1602e5b8 must implement OnFragmentInteractionListener
    at com.example.namal.fragments.Pie1.onAttach(Pie1.java:83)

你需要让你的activity实现OnFragmentInteractionListener

public class MainActivity extends AppCompatActivity implements OnFragmentInteractionListener 

【讨论】:

以上是关于在android中的一个Activity中添加两个片段的主要内容,如果未能解决你的问题,请参考以下文章

android开发 如何从一个activity中的两个按钮分别跳转到另外两个activity?

android使用switchcase页面跳

Android studio这两个之间能页面跳转吗 ??怎么实现(纯新手😭求大佬帮看看)

使用两个两个活动创建 Android PDF 文件

Android:Activity 中的 Jetpack Compose 和 XML

如何实Android中现两个activity的图片传递?