みんなおはよう、
アクティビティの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ですが、理由はわかりません。
どんな助けでも大歓迎です。
ありがとう、ジョシュ