我是android新手。我正在尝试使用库支持,并且找不到使用嵌套片段和当前代码结构的方法。 我分叉了这个github项目:AndriodMaterialDesignToolbar。我重用了这个结构,以便有两个标签,一个列表和一个地图,它可以工作。我想在包含列表的选项卡中嵌套片段,如下所示:
MainActivity -> MapsFragment
-> CategoryListItemFragment -> DetailItemFragment.
但无法找到通过包含项目详细信息的片段替换CategoryListItemFragment的方法。我尝试使用它来解决它:
FragmentManager manager = getChildFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(fragmentID, DetailItemFragment.newInstance(i));
transaction.addToBackStack(null);
transaction.commit();
但不知道容器的ID,因为该片段是由适配器在函数getItem中添加的。
以下是main_layout的代码,以澄清:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark" />
<com.test.discountapp.SlidingTabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark"
android:paddingLeft="20dp"
android:paddingRight="20dp" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0px"
android:layout_weight="1"
android:background="@android:color/white" />
</LinearLayout>
<ListView
android:id="@+id/navdrawer"
android:layout_width="@dimen/navdrawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:layout_marginTop="?attr/actionBarSize"
android:background="?attr/colorPrimaryDark"
android:choiceMode="singleChoice"
android:divider="@android:color/white"
android:dividerHeight="1dp"
android:drawSelectorOnTop="false">
</ListView>
</android.support.v4.widget.DrawerLayout>
更新
以下是我的ViewPagerAdapter的代码:
public class ViewPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT =2;
private int titles[];
private Activity mActivity;
public ViewPagerAdapter(Activity activity, FragmentManager fm, int[] titles2) {
super(fm);
titles=titles2;
mActivity = activity;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return CategoryListItemFragment.newInstance(titles[position]);
case 1:
return MapsFragment.newInstance(titles[position]);
}
return null;
}
public CharSequence getPageTitle(int position) {
return mActivity.getString(titles[position]);
}
@Override
public int getCount() {
return PAGE_COUNT;
}
}
答案 0 :(得分:1)
replace()函数中的第一个参数不引用片段Id,但实际上它指的是容器的id。
replace(int containerViewId,Fragment fragment,String tag)
或
replace(int containerViewId,Fragment fragment)
请参阅此处的官方文档。 http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html