18

私のアプリケーションでは、withActivityを保持する を使用しているため、そのすべてのタブはです。FragmentFragmentTabHostnested Fragments

とともにActivityを保持する の内部では、を使用して添付されたものへの参照を取得できます。Fragmentnested FragmentonAttachedFragment()

しかし、nested Fragmentfromへの参照を取得する方法はFragmentTabHost?

4

4 に答える 4

26

のソース コードを調べると、フラグメント タブを追加するときに、ネストされFragmentTabHostた に のタグが割り当てられていることがわかりました。TabSpecFragment

したがって、これへの参照を取得するには、Fragment呼び出す必要があります

getChildFragmentManager().findFragmentByTag(tabSpecTag)

于 2013-04-09T10:50:27.113 に答える
7

しばらくやってみたのですが、追加直後にマネージャーにアクセスしようとしてnullいたため、 から戻されていました。FragmentManageronCreateView()

ここに何が起こったのかについての良い説明があります

Fragmentまだ選択されていないタブは にまだ存在しないため、同様FragmentManagerに返されることに注意することも重要です。で にアクセスしようとする前にnullを呼び出すことで、これを回避しました。あまりきれいではありませんが、機能します。mTabHost.setCurrentTab(index)FragmentFragmentManager

于 2013-04-09T22:56:33.900 に答える
1

遅延を伴うコードの実行を伴わないため、少し気に入ったソリューションを見つけました(Androidハードウェアの断片化とプロセッサ速度の違いを考えると、これは常に不安定です)。

onTabChanged() メソッドで、フラグメントを検索する前に、tabHost に関連付けられたフラグメント マネージャーで executePendingTransactions() を呼び出します。FragmentTabHost のソース コードには、executePendingTransactions() を呼び出す必要があるのに失敗する場所がいくつかあるようです。

これは、タブが1つの例外を除いて変更されるたびに機能します...選択された最初のタブはまだnullに戻ります...私の特定のケースでは、onResume.

お役に立てれば。

于 2015-02-05T19:57:34.617 に答える