大家早上好,
我的 Activity 的 ActionBar 在离开一段时间后无法保持正确的功能。基本上,我根据我所在的 ViewPager 中的哪个页面设置了不同的 ActionBar 视图。3的中间页面实现了ActionBar.NAVIGATION_MODE_LIST,带有一个列表,用于过滤该页面上ListView的内容。在其他两页上,此列表未显示。我处理这个的代码:
public class SectionsPagerAdapter extends MyPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
Fragment fragment;
if(i==0){
ActionBar bar = MyApp.this.getActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
fragment = page1;
}else if(i==1){
fragment = page2;
}else{
fragment = page3;
}
return fragment;
}
@Override
public int getCount() {
return 3;
}
@Override
public void onPageSelected(int position) {
if(position== 1 && menuSearch != null){
menuSearch.setVisible(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
}else{
if(menuSearch != null){
menuSearch.setVisible(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
}
}
currentPage = position;
}
public int getCurrentPage() {
return currentPage;
}
我目前可以通过启动一个新活动来强制测试失败,然后我可以强制关闭它,当我回到这个主要活动时,每个页面上都会显示 ActionBars 下拉菜单。该菜单也失去了与它在第 2 页中执行的过滤属性的连接。
更新 1:
我现在认为我的问题在于我的 ViewPager、ActionBar 和它们控制的 Fragments 之间的脱节。我将以下代码添加到 Activity 的 onNavigationItemSelected 部分:
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
Log.i(TAG,"Fragment ID:" + String.valueOf(fragment.getId()));
if(fragment.isAdded()){
Log.i(TAG,"fragment.isAdded");
}
当我第一次运行应用程序时,这些日志返回以下内容:
片段 ID:2131492869 fragment.isAdded
但是,在我强制崩溃或离开应用程序并稍后返回后,日志返回
片段 ID:0
fragment.isAdded 在这一点上是假的,但我不知道为什么。
任何帮助将不胜感激。
谢谢,乔什