为了账号安全,请及时绑定邮箱和手机立即绑定

getSupportFragmentManager()和getChildFragmentManag

getSupportFragmentManager()和getChildFragmentManag

梦里花落0921 2019-09-02 17:00:18
我的类继承了Fragment,这就是为什么它不能使用getSupportFragmentManager()。我正在使用getChildFragmentManager,它显示错误 - IllegalArguementException:找不到id ...错误的视图。任何指导将不胜感激。调用AttachmentsListFragment的代码是Bundle b = new Bundle();b.putSerializable("AttachmentsList", msg.attachments);          AttachmentListFragment listfrag = new AttachmentListFragment(msg.attachments);FragmentTransaction transaction = getFragmentManager().beginTransaction();       transaction.add(R.id.attachmentslistcontainer, listfrag);transaction.addToBackStack(null);transaction.commit();attachmentslayout.xml是<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:id="@+id/attachmentslistcontainer"    android:orientation="vertical" >    <TextView        android:id="@+id/textViewAttachmentHeader"        style="@style/Normal.Header.Toolbar"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="@color/list_separator_background"        android:ellipsize="end"        android:gravity="center"        android:maxLines="2"        android:text="@string/attachments_header"        android:textColor="#FFFFFFFF"        android:textSize="22sp"        android:textStyle="bold"        android:visibility="visible" />    <ListView        android:id="@android:id/list"        android:layout_width="fill_parent"        android:layout_height="fill_parent" >    </ListView></FrameLayout>AttachmentsListFragment.javapublic class AttachmentListFragment extends ListFragment implements IAttachmentsData {    ArrayList<Attachments> items = null;    Integer cellLayoutID;    Integer index;    public AttachmentListFragment() {    }    public AttachmentListFragment(ArrayList<Attachments> items) {        this.items = items;        Log.i("Logging", "Items size" + items.size()); //$NON-NLS-1$    }
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

getFragmentManager属于Activity

getChildFragmentManager属于Fragment


例如,我们有一个应用程序,它具有MainActivity,Fragment1,Fragment2,container_view_on_main是在布局activty_main.xml


要显示 Fragment1上MainActivity,我们必须使用getSupportFragmentManager()


getSupportFragmentManager().beginTransaction().replace(R.id.container_view_on_main, Fragment1.newInstance());

 Fragment2从Fragment1我们有2路显示


使用 getFragmentManager()


getFragmentManager().beginTransaction().replace(R.id.container_view_on_main, Fragment1.newInstance());

使用 getChildFragmentManager()


首先,我们要创建一个ID布局container_view_on_fragment1里面fragment1.xml,然后


getChildFragmentManager().beginTransaction().replace(R.id.container_view_on_fragment1, Fragment2.newInstance()).commit();

结论


在这个演示中,我认为我们应该在使用getFragmentManager()时使用Fragment1,Fragment2因为它简单且对性能有益(Fragment1在Fragment2打开时会停止)


我们用的时候getChildFragmentManager()?

例如你MainActivity有一个ViewPager有3页的页面,你需要在每个页面内替换一些片段。


更多

- getParentFragment()

getFragmentManager() => return null 

getChildFragmentManager() =>总是返回根片段(Fragment1在演示中甚至我们去Fragment3 ,, ...)


这个答案是基于我的理解,所以如果我错了请纠正我。希望它有所帮助


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 2296 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信