Android 如何以编程方式将此片段添加到片段中?
我试图在DialogFragment中显示嵌套的ListFragment 显然,我不能在XML中为DialogFragment布局声明Android 如何以编程方式将此片段添加到片段中?,android,android-fragments,android-dialogfragment,android-listfragment,child-fragment,Android,Android Fragments,Android Dialogfragment,Android Listfragment,Child Fragment,我试图在DialogFragment中显示嵌套的ListFragment 显然,我不能在XML中为DialogFragment布局声明,因为片段中的片段需要childFragmentManager。所以我试着在我的DialogFragment中这样做: Fragment listfragment = new ClassThatExtendsListFragment(); FragmentTransaction transaction = getChildFragmentManager().beg
,因为片段中的片段需要childFragmentManager。所以我试着在我的DialogFragment中这样做:
Fragment listfragment = new ClassThatExtendsListFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(????????, listfragment).commit();
我完全不知道我需要把什么资源ID放入????????部分,或者我将如何分配它。只需在布局中添加FrameLayout。假设您将其id设置为“容器”
我不确定您对DialogFragment使用的是什么类型的布局,但通常在DialogFragment膨胀的XML中,您需要添加一个
FrameLayout
,重要的是给它一个ID。然后,当您执行片段事务时,您传递该FrameLayout的资源ID
XML:
然后,对于片段事务:
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).commit();
您可能希望使用add
方法而不是replace
,但这取决于您自己
如果希望按下enable back(启用后退)按钮,您可能还希望将上一个片段添加到Backback:
fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).addToBackStack(null).commit();
我的要求也和你一样。下面的代码为我工作
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyTripFragment myTripFragment = new MyTripFragment();
fragmentTransaction.add(R.id.fragment_container, myTripFragment);
fragmentTransaction.commit();
XML代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
希望它能对您有所帮助。试试看……这是一个片段中的片段,您不能使用常规管理器。我假设这段代码也在dialogfragment的oncreatedialog方法中,但我没有注意到这一点。在这种情况下,您只需要使用childfragmentmanager而不是常规的fragmentmanager。作为第一个参数传入add/replace方法的内容将是相同的(希望子片段显示的framelayout的资源id),放置此代码的位置取决于希望ListFragment显示的位置/时间。只要您执行上面的代码,片段事务就会提交并显示。所以只要把它放在合适的地方,当你想要新的片段出现时,我怎么知道使用add或replace呢?如果我用完了支持片段怎么办?您的目标最低SDK/API版本是多少?
fragmentTransaction.replace(R.id.fragment_container, new MyFragment()).addToBackStack(null).commit();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyTripFragment myTripFragment = new MyTripFragment();
fragmentTransaction.add(R.id.fragment_container, myTripFragment);
fragmentTransaction.commit();
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>