我花了近两天的时间在网上冲浪,以寻找下一个问题的解决方案: 我在ViewPager的选项卡中有一个适配器类,我尝试使用片段管理器在click事件中调用片段。调用片段时,一切正常,但是当我尝试返回时,最后一个位置的前一个选项卡未显示,而是显示了主要活动。
在适配器中:
FragmentManager fm = ((MainActivity) v.getContext()).getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction()
.add(R.id.root, fragment)
.addToBackStack(null);
ft.commit();
片段
getFragmentManager().popBackStackImmediate();
返回上一个片段,但不适用于我,仅重定向pfor主要活动
答案 0 :(得分:0)
似乎没有将片段添加到backstack
中。假设您正在使用FragmentTransaction,请将以下代码行与其他代码一起添加以交换片段:
fragmentTransaction.addToBackStack(true);
答案 1 :(得分:0)
您的意思是说,如何加载以前的片段而不是活动?如果这是您的要求,请在onBackPressed()方法中执行以下操作(如果要在后向堆栈中添加片段):
onBackPressed() {
super.onBackPressed();
getActivity().getFragmentManager().popBackStack();
}
答案 2 :(得分:0)
Android OS为Activity提供了后退功能,还为Fragment提供了后退功能。如果您将一个片段添加到后堆栈中,那么当您按下android设备的后退菜单时,您会找到保存在后堆栈弹出窗口中的片段。直到所有保存的Fragments都返回到堆栈后,该活动才会退出。
fragmentTransaction.addToBackStack(true);
答案 3 :(得分:0)
如果您在片段内部使用viewpager,请使用片段的childFragmentManager而不是fragmentManager。
片段类:
adapterViewPager = new MyPagerAdapter(getChildFragmentManager());
vpPager.setAdapter(adapterViewPager);
适配器类:
public class MyPagerAdapter extends FragmentPagerAdapter {
private static int NUM_ITEMS = 3;
public MyPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
// Returns total number of pages
@Override
public int getCount() {
return NUM_ITEMS;
}
// Returns the fragment to display for that page
@Override
public Fragment getItem(int position) {
switch (position) {
case 0: // Fragment # 0 - This will show FirstFragment
return FirstFragment.newInstance(0, "Page # 1");
case 1: // Fragment # 0 - This will show FirstFragment different title
return FirstFragment.newInstance(1, "Page # 2");
case 2: // Fragment # 1 - This will show SecondFragment
return SecondFragment.newInstance(2, "Page # 3");
default:
return null;
}
}
// Returns the page title for the top indicator
@Override
public CharSequence getPageTitle(int position) {
return "Page " + position;
}
}