web-dev-qa-db-ja.com

タブフラグメントが選択されたときにトリガーされるイベント

アクティビティでタブフラグメントを使用していて、アクションバーがタブをホストしています。私がやりたいのは、(ユーザーが選択した)ビューにフラグメントが表示(または再表示)されるたびに、何かを開始することです。この場合、フラグメントのonResumeを使用することはできません。これは、ユーザーが別のタブを選択したときにすべてのタブが実際に「一時停止」されることはなく、onResumeが呼び出されないためです。

ホスティングアクティビティから次の2つのイベントを使用できますが、フラグメントがこのロジックを独自に認識してそのタスクを実行する必要があるため、これらのイベントは必要ありません。何か案が? tks。

  @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        // When the given tab is selected, switch to the corresponding page in the ViewPager.
        mViewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }
16

説明されているように、フラグメントでsetUserVisibleHint()を試してください この回答では 。フラグメントが選択されたタブにある場合、setUserVisibleHint()はtrueで呼び出され、フラグメントが選択されたタブでない場合、setUserVisibleHint()はfalseで呼び出されます。これは、サポートライブラリを使用して私にとってはうまくいきます。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser)
        Log.d("MyFragment", "Fragment is visible.");
    else
        Log.d("MyFragment", "Fragment is not visible.");
}
40
Doug Simonton

setUserVisibleHint(boolean isVisibleToUser)またはonHiddenChanged (boolean hidden)メソッドをオーバーライドできます。

  • setUserVisibleHint(boolean isVisibleToUser)の場合、
    isVisibleToUser=trueフラグメントが表示されている場合、およびisVisibleToUser=falseフラグメントが非表示の場合。

  • onHiddenChanged (boolean hidden)の場合、hidden:Trueの場合
    フラグメントが非表示になり、表示されていない場合はfalseになります。

8
Farman Ali Khan