我有一个片段界面,底部有标签,可以在主视图中打开不同的片段.
我有一个特定的片段,它是一个项目列表.如果用户选择此列表中的一个项目,则打开另一个片段,其中包含一个viewpager,它在前一个片段的列表中的所有项目之间水平滚动.这非常有效.
viewpager使用FragmentPagerAdapter来显示项目.
当用户选择列表中的项目,查看它,然后点击标签栏上的按钮返回列表,然后选择另一个项目时,问题就出现了.第二次选择项目时,将显示空白屏幕而不是viewpager.发生这种情况时,我的LogCat中没有收到任何错误.
为什么viewpager只出现在第一次?
FragmentPagerAdapter:
public class ViewPagerAdapter extends FragmentPagerAdapter {
Cursor mCursor;
public ViewPagerAdapter(FragmentManager fm, Cursor c) {
super(fm);
mCursor = c;
}
public void changeCursor(Cursor c) {
mCursor = c;
this.notifyDataSetChanged();
}
@Override
public int getCount() {
if (mCursor == null) return 0;
else return mCursor.getCount();
}
@Override
public Fragment getItem(int position) {
mCursor.moveToPosition(position);
return TeamCardFragment.newInstance(mCursor, position);
}
}
Run Code Online (Sandbox Code Playgroud)
PagerFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle bundle = getArguments();
mCursorPosition = bundle.getInt(TeamCardCommon.BUNDLE_KEY_CURSOR_POSITION); …Run Code Online (Sandbox Code Playgroud) android android-fragments android-viewpager android-nested-fragment
Back Stack是否支持与Android中嵌套片段的交互?
如果是的话,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后台堆栈的事实.我希望它不是因为嵌套片段的问题,而是我做错了什么.
以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换:
MyFragment fragment = new MyFragment();
FragmentTransaction ft = getChildFragmentManager().beginTransaction();
ft.setCustomAnimations(R.animator.slide_in_from_right, R.animator.slide_out_left, R.animator.slide_in_from_left, R.animator.slide_out_right);
ft.addToBackStack(null);
ft.replace(R.id.myFragmentHolder, fragment);
ft.commit();
Run Code Online (Sandbox Code Playgroud) 我有一个ViewPager设置,它使用片段显示我可以循环的不同图标,以便用户可以导航不同的菜单选项.
ViewPager中的每个项目都位于片段中,如下所示:
public static Fragment newInstance(MainHandheldActivity context, int pos)
{
Bundle b = new Bundle();
b.putInt("pos", pos);
return Fragment.instantiate(context, ObjectFragment.class.getName(), b);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
// Get menu image icons
int icons[] = new int[3];
icons[0] = R.mipmap.ic_text;
icons[1] = R.mipmap.ic_voice;
icons[2] = R.mipmap.ic_mail;
// Get root view of the fragment layout
LinearLayout rootView = (LinearLayout) inflater.inflate(
R.layout.fragment_collection_object, container, false);
Bundle args = getArguments();
int pos = args.getInt("pos");
// Set the current menu …Run Code Online (Sandbox Code Playgroud)