当你从TabA滑动到TabB到TabC时,我有三个绑定到Tabs的片段,它分别使用ViewPager加载FragA,FragB和FragC(希望你理解这一部分)。这个滑动Tabs工作正常,但我有几个固定按钮附加到布局的底部,当点击每个按钮时,我想加载一个新的片段来替换任何片段A,B或C.替换工作正常,但当我返回到被替换的/之前的片段时,该布局上的所有UI组件完全消失,并且它不表示它是否已被暂停,停止或销毁。下面是守则:
替换以前的片段代码:
if(actionBar.isShowing())
{
actionBar.hide();
}
FragmentManager fms = getSupportFragmentManager();
FragmentTransaction fts = fms.beginTransaction();
search s = new search();
if(getCurrentDisplayFragment() == Type1)
{
setcurrentItem(viewPager.getCurrentItem());
Fragment frgs = mAdapter.getItem(viewPager.getCurrentItem());
viewPager.removeViewAt(viewPager.getCurrentItem());
frgs.setUserVisibleHint(false);
Log.i("if say", "Not Responding");
}
fts.replace(R.id.hoster, s);
fts.addToBackStack("search");
fts.commit();
setCurrentDisplayFragment(s,Type2);
setCurrentDisplayFragment(s,Type2);
我构建了该代码,以帮助指示正在替换哪个片段以及采取哪些措施。 S是片段,Type2是字符串
因此,当按下后退按钮时,我想返回到之前被替换的任何片段A,B或C. 这是代码:
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
//super.onBackPressed();
Log.i("event in back","I have been presssed ");
if(getCurrentDisplayFragment() == Type2)
{
actionBar.show();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
fm.popBackStack();
ft.remove(getCurrentDisplayFragment(Type2));
ft.commit();
viewPager.setCurrentItem(getcurrentItem());
actionBar.setSelectedNavigationItem(getcurrentItem());
Fragment frags = mAdapter.getItem(viewPager.getCurrentItem());
frags.setUserVisibleHint(true);
setCurrentDisplayFragment(frags, Type1);
}
else
{
}
}
虽然没有显示某些变量名称和方法声明,但您应该了解正在做什么,因为所有声明都已完成。它只是替换和保留他们的UI状态,这给我一个问题。
答案 0 :(得分:0)
为什么这么复杂?如果要替换视图寻呼机中的任何片段,则只需替换视图寻呼机。如果你有一个片段拿着带有标签的视图寻呼机,当按下底部按钮时,你只需要用新片段替换持有视图寻呼机的片段,这将会容易得多。这样,当按下后退按钮时,您将不需要做任何事情。