Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何以编程方式将此片段添加到片段中?_Android_Android Fragments_Android Dialogfragment_Android Listfragment_Child Fragment - Fatal编程技术网

Android 如何以编程方式将此片段添加到片段中?

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

我试图在DialogFragment中显示嵌套的ListFragment

显然,我不能在XML中为DialogFragment布局声明
,因为片段中的片段需要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>