0

みんなおはよう、

アクティビティのActionBarが一定期間放置された後、適切な機能を維持するのに問題があります。基本的に、ViewPagerのどのページを使用しているかに応じて、さまざまなActionBarビューを設定します。3の中央のページは、そのページのListViewのコンテンツをフィルタリングするために使用されるリストを使用してActionBar.NAVIGATION_MODE_LISTを実装します。他の2ページには、このリストは表示されていません。これを処理するための私のコード:

  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;
}

現在、新しいアクティビティを開始してテストの失敗を強制することができます。その後、強制的に閉じることができます。このメインアクティビティに戻ると、すべてのページに[アクションバー]ドロップダウンメニューが表示されます。メニューは、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:2131492869fragment.isAdded

ただし、強制的にクラッシュするか、アプリを終了して後で戻った後、ログが返されます

フラグメントID:0

現時点ではfragment.isAddedはfalseですが、理由はわかりません。

どんな助けでも大歓迎です。

ありがとう、ジョシュ

4

1 に答える 1

0

なぜこれが起こっているのかについて誰かが私に洞察を与えることができますか? アクションバーの状態を何らかの形で onPause に保存してから、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);
}
于 2013-02-04T11:25:19.580 に答える