2016-11-26 13 views
0

私の現在のAndroidアプリケーションは、2つのフラグメントを持っている: -Androidのフラグメントを正しく表示/隠す方法は?

ListFragment 
Detailfragment 

マイレイアウトXMLは次のようになります。 -

<FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_anchorGravity="bottom" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
</FrameLayout> 

次のように私は最初ListFragmentを表示: -

final FragmentManager fragmentManager = getFragmentManager(); 
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(containerId, mListFragment, LIST_FRAGMENT_TAG); 

if (mLandscape) { 
} else { 
     fragmentTransaction.addToBackStack(LIST_FRAGMENT_TAG); 
} 

fragmentTransaction.commit(); 

ユーザーリスト項目をクリックすると、現在のリスト位置などを保持するようにリストを非表示にし、detailFragmentを表示します。

は、相続人のコードは、私はこのUIの変更を実行するために使用します。 -

mDetailFragment = new DetailFragment(); 

final Bundle fragmentArguments = new Bundle(); 
fragmentArguments.putString(ITEM_KEY, item.getKey()); 
mDetailFragment.setArguments(fragmentArguments); 

final FragmentManager fragmentManager = getFragmentManager(); 
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

if (mLandscape) { 
    fragmentTransaction.replace(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG); 
} else { 
    fragmentTransaction.hide(mListFragment); 
    fragmentTransaction.add(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG); 
} 

fragmentTransaction.commit(); 

上記のコードは、すべてが正常に動作し、私は正常一覧と詳細フラグメントの間を遷移することができます。

問題は、ユーザーがDetail FragmentのBACKボタンを押してListFragmentに戻ると、空の画面に戻ることです。

私はディテールフラグメントを削除し、隠されたリストのフラグメントを示すために、私の活動でこのコードを持っている: -

@Override 
    public void onBackPressed() { 

     if (mLandscape) { 
     } else { 

     if (mListFragment.isHidden()) { 
      final FragmentManager fragmentManager = getFragmentManager(); 
      final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.remove(mDetailFragment); 
      fragmentTransaction.show(mListFragment); 
      fragmentTransaction.commit(); 
     } 
    } 
    super.onBackPressed(); 
} 

はなぜfragmentTransaction.show(mListFragment);隠しListFragmentが表示されませんか?

注:私はいつも、私はHERESに私はこの問題を修正する方法super.onCreate(savedInstanceStateNull);

private final Bundle savedInstanceStateNull = null; 
    private boolean mLandscape = false; 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceStateNull); 
     setContentView(R.layout.activity_article_list); 

     mLandscape = getResources().getBoolean(R.bool.landscape); 

     final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     manageFragments(); 

    } 
+1

ウル問題はListFragmentですが、コードから非表示オプションを削除し、バックスタックにフラグメントを追加しようと非表示postion – Nithinlal

+1

です。私はあなたの問題が解決されるかもしれないと思う。 – Nithinlal

+1

もう1つのことはonBackPressedのelse部分を削除し、popBackStack() – Nithinlal

答えて

0

にヌルの束を通過してきた向きの変化に完全に私のUIを再構築するようにするため: -

まず私のオーバーライドonBackPressed()

を削除

ディスプレイリストを次のように変更します。 -

final FragmentManager fragmentManager = getFragmentManager(); 
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
fragmentTransaction.replace(containerId, mListFragment, LIST_FRAGMENT_TAG); 

fragmentTransaction.commit(); 
0123これに

変更表示detailFragment: -

mDetailFragment = new DetailFragment(); 

final Bundle fragmentArguments = new Bundle(); 
fragmentArguments.putString(ITEM_KEY, item.getKey()); 
mDetailFragment.setArguments(fragmentArguments); 

final FragmentManager fragmentManager = getFragmentManager(); 
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

if (mLandscape) { 
    fragmentTransaction.replace(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG); 
} else { 
    fragmentTransaction.hide(mListFragment); 
    fragmentTransaction.add(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG); 
    fragmentTransaction.addToBackStack(DETAIL_FRAGMENT_TAG); 
} 

fragmentTransaction.commit(); 
関連する問題