Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:应用程序/活动与ActionBar失去连接_Android_Android Actionbar - Fatal编程技术网

Android:应用程序/活动与ActionBar失去连接

Android:应用程序/活动与ActionBar失去连接,android,android-actionbar,Android,Android Actionbar,大家早上好 我的活动的ActionBar在离开一段时间后无法保持正常功能。基本上,我有不同的ActionBar视图设置,这取决于我在ViewPager中的哪个页面。中间的3页实现了ActionBar.NAVIGATION\u MODE\u列表,该列表用于过滤该页上ListView的内容。在其他两页上,此列表未显示。我处理此问题的代码: public class SectionsPagerAdapter extends MyPagerAdapter { public Section

大家早上好

我的活动的ActionBar在离开一段时间后无法保持正常功能。基本上,我有不同的ActionBar视图设置,这取决于我在ViewPager中的哪个页面。中间的3页实现了ActionBar.NAVIGATION\u MODE\u列表,该列表用于过滤该页上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和它们控制的片段之间的断开连接。我向活动的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 片段。已添加

但是,在我强制崩溃或离开应用程序并稍后返回后,日志会返回

片段ID:0

此时fragment.isAdded为false,但我不确定原因

任何帮助都将不胜感激

谢谢, 乔希

有人能告诉我为什么会发生这种情况吗?我应该在onPause中保存actionbar状态,然后在onResume中恢复吗

是的,这是因为您没有保存最后一个索引

所以基本上你需要做的是

在onResume中

按如下方式设置viewPager当前索引:
viewPager.setCurrentItem(lastFragmentIndex)

我认为您需要将片段保存在
onSaveInstanceState
中,然后在
onRestoreInstanceState
中恢复它们,如下所示:

protected void onSaveInstanceState(Bundle outState) {
        FragmentManager fm = getSupportFragmentManager();
            fm.putFragment(outState, 1, fragment1);
            fm.putFragment(outState, 2, fragment2);
}
恢复

 protected void onRestoreInstanceState(Bundle savedInstanceState) {
            super.onRestoreInstanceState(savedInstanceState);
            FragmentManager fm = getSupportFragmentManager();    
            fragment1 = (Fragment) fm.getFragment(savedInstanceState, 1);
}

这并没有解决问题。我在onPause()方法中将lastFragmentIndex设置为int。这就是目的吗?是的,这就是目的,我不确定你做得是否正确。试着在onresume中设置特定的索引,如“1”,并确保每次onresume调用时,你都更改为索引1Ok,通过一些小的修改,我能够使这项功能正常工作。但是,我的actionbar中的下拉列表仍然会丢失它与所连接的内容提供商的链接。我很困惑,因为在同一个actionbar中还有一个搜索按钮仍然与内容提供商合作。用新信息更新了上面的问题。谢谢你的帮助。