用 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
我是 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