Какое событие запускается при выборе фрагмента вкладки

Я использую фрагменты вкладок в действии, а на панели действий находятся вкладки. Я хочу, чтобы всякий раз, когда фрагмент появляется (или снова появляется) в представлении (выбранном пользователем), я начинаю что-то делать. Я не могу использовать onResume фрагмента в этом случае, так как все вкладки никогда не "приостанавливаются", когда пользователь выбирает другую вкладку, поэтому onResume не вызывается

Я могу использовать два следующих события из активности хостинга, но я не хочу их, так как я ожидаю, что фрагмент должен сам знать эту логику и выполнять эту задачу. Есть идеи? ТКС.

  @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) {
    }

Ответ 1

Попробуйте setUserVisibleHint() в фрагменте, как описано в этом ответе. Когда фрагмент находится на выбранной вкладке, setUserVisibleHint() будет вызываться с истинным значением, а когда фрагмент не является выбранной вкладкой, setUserVisibleHint() будет вызван с ложью. Это работает для меня с помощью библиотеки поддержки.

@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.");
}

Ответ 2

Вы можете переопределить setUserVisibleHint(boolean isVisibleToUser) или  onHiddenChanged (boolean hidden).

  • В случае setUserVisibleHint(boolean isVisibleToUser),
    isVisibleToUser=true, когда фрагмент виден и isVisibleToUser=false, когда фрагмент скрыт.

  • В случае onHiddenChanged (boolean hidden), hidden:True, если фрагмент теперь скрыт, false, если он не отображается.