在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 studio这两个之间能页面跳转吗 ??怎么实现(纯新手😭求大佬帮看看)