gpt4 book ai didi

java - 当我初始化扩展 fragment 时,如何停止调用父 fragment 的 onActivityCreated ?

转载 作者:行者123 更新时间:2023-12-02 09:55:42 25 4
gpt4 key购买 nike

基本上,我通过扩展从另一个 fragment 创建了新的 fragment ,因为我只想重写一些方法,但仍然继续使用很多方法。

原始 fragment

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

扩展 fragment 。

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

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

所以当我像这样从 PagerAdapter 调用扩展 fragment 时

    @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;
}
}

看起来就像两个 fragment 中的onActivityCreated一样被调用(我只想调用扩展)

这是我的日志。

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

那么是否可以只触发扩展 fragment (RestaurantByFoodListFragment)内的onActivityCreated而不触发原始 fragment (RestaurantListFragment)?

谢谢!

最佳答案

您可以通过更改类来解决此问题,如下所示:

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() 委托(delegate)给一个新方法 onActivityCreatedInternal(),而在子类中您不是 调用 super.onActivityCreatedInternal()

这将使您能够 (a) 满足所有 Fragment 子类调用 super.onActivityCreated() 的要求,并且 (b) 允许完全覆盖“内部”的行为 onActivityCreated() 通过重写被委托(delegate)的方法。

关于java - 当我初始化扩展 fragment 时,如何停止调用父 fragment 的 onActivityCreated ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56025417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com