1

私の質問を説明するのは簡単ではありませんが、最善を尽くします。

listFragment私のタブレットアプリには、左側にA、detailFragment右側にBを持つ1つのアクティビティがあります。そのため、リストの項目をクリックするdetailFragmentと、選択した (リスト) 項目の適切な詳細が表示されます。

detailFragmentここで、 B のボタンをクリックすると、フラグメントが新しいFragmentタイプの infoFragment と交換されます。listFragment 左側はそのままです。

だから今、リストの別の項目をクリックすると、infoFragmentが消えて、detailFragmentもう一度取得したいと思います。

私の問題は、現在infoFragmentまたはがdetailFragment表示されているかどうかを確認する必要があることです。そのため、単に更新するか、detailFragment停止しinfoFragmentて新しいdetailFragment.

考え:

 if ( //detailFragment is active ) {
        updateContent();
 }
 else {
        FragmentManager.buildDetailFragment();
 }

今何時間もいじっています、どんな助けも大歓迎です!!

detailFragment または listFragment が表示されているかどうかを確認するにはどうすればよいですか?

編集: ここで、detailFragment を infoFragment に変更します。

FragmentManager fm  = getFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.details_fragment);

fragment = new InfoFragment();
fm.beginTransaction()
  .replace(R.id.details_fragment, fragment)
  .commit();
4

4 に答える 4

3

FragmentTransactionFragmentを使用してフラグメント マネージャにを追加すると、キー値を指定できます。次に、FragmentByTagを見つけて、そのキー値を持つ がフラグメント マネージャーに追加されているかどうかを判断できます。Fragment

ViewPager複数のフラグメントが一度に追加される構造またはその他の構造を使用していない限り、フラグメント マネージャーにタグによるフラグメントが含まれているかどうかを検索すると、現在表示されているものがわかります。結果はフラグメント自体への参照であるため、その検索の結果を使用してフラグメントを更新できます。

FragmentActivityこれは、パブリックにアクセス可能なフラグメント メソッドを呼び出すことで、 からフラグメントに直接データを渡すことができることを意味します。例えば

Fragment displayedFragment = fragmentManager.findFragmentByTag(TAG);
if(displayedFragment != null){ //null if no fragment with tag value       
    displayedFragment.updateList() //public method within fragment
} 
于 2013-08-14T13:21:01.910 に答える
1
FragmentManager fm  = getFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.content_id);

getClass でフラグメント名を取得できるようになりました

fragment.getClass().getSimpleName()
于 2015-06-04T12:47:54.773 に答える