使用SlidingTableLayout和ViewPager替换Child Fragment

时间:2015-08-02 02:02:02

标签: android android-viewpager android-support-library

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

}

1 个答案:

答案 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