用 SlidingTableLayout 和 ViewPager 替换子片段

Replace by Child Fragment with SlidingTableLayout and ViewPager

我是 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;
    }

}

replace()函数中的第一个参数不是指片段Id,而是指容器的id。

replace(int containerViewId, Fragment fragment, String tag)

replace(int containerViewId, Fragment 片段)

参考这里的官方文档。 http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html