Как остановить onActivityCreated родительского фрагмента для вызова, когда я инициализирую расширяемый фрагмент? - PullRequest
0 голосов
/ 07 мая 2019

По сути, я создал новый фрагмент с помощью Extended из другого фрагмента, потому что я просто хочу переопределить какой-то метод, но все еще продолжаю использовать его.

Оригинальный фрагмент

public class RestaurantListFragment extends BaseFragment {
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d(TAG, " :Original :onActivityCreated");
    }
}

Расширяет фрагмент.

public class RestaurantByFoodListFragment extends RestaurantListFragment {
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        Log.d(TAG, " :Modify :onActivityCreated");
    }
}

Итак, когда я вызываю фрагмент extends из PagerAdapter, как это

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
            case 1:
                Log.d(TAG, " :getItem");
                restaurantByFoodListFragment = new RestaurantByFoodListFragment();
                restaurantByFoodListFragment.setFoodId(this.foodId);
                return restaurantByFoodListFragment;
            default:
                return null;
        }
    }

Похоже, что onActivityCreated внутри обоих вызываемых фрагментов (я просто хочу, чтобы вызывал extends)

Это мой журнал.

Res List Fragment:  :Original :onActivityCreated
Res By Food Fragment:  :Modify :onActivityCreated
Res List Fragment:  :Original :onActivityCreated
Res By Food Fragment:  :Modify :onActivityCreated

Так возможно ли это только для триггера onActivityCreated внутри расширенного фрагмента (RestaurantByFoodListFragment) без триггера исходного фрагмента (RestaurantListFragment)?

Спасибо!

1 Ответ

1 голос
/ 07 мая 2019

Вы можете решить эту проблему, изменив классы следующим образом:

public class RestaurantListFragment extends BaseFragment {
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        onActivityCreatedInternal();
    }

    protected void onActivityCreatedInternal() {
        Log.d(TAG, " :Original :onActivityCreated");
    }
}
public class RestaurantByFoodListFragment extends RestaurantListFragment {
    @Override
    protected void onActivityCreatedInternal() {
        Log.d(TAG, " :Modify :onActivityCreated");
    }
}

То, что вы здесь делаете, делегирует от onActivityCreated() новому методу onActivityCreatedInternal(), и в подклассе вы не вызываете super.onActivityCreatedInternal().

Это позволит вам обоим (а) выполнить требование, чтобы все подклассы Фрагмента обращались к super.onActivityCreated(), и (b) разрешить полное переопределение поведения "изнутри" onActivityCreated() путем переопределения метода, которому передается метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...