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

标签 java android android-fragments

基本上,我通过扩展从另一个 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/

相关文章:

java - 将混淆的 Android dex/jar 文件反编译为 Java 源代码

android - 是否可以将 *.so 库移到扩展文件中?

android - 在 kotlin 中找不到 getChildFragmentManager()

java - 使用套接字将数据从 node.js 发送到 Java

Django 上的 Java 项目?

android - 在 Android 的 BluetoothSocket inputstream.read() 中实现超时

android - 无法过渡到 fragment 。期望不同类型的函数

android - 按顺序从backstack中获取所有 fragment

java - 如何快速采集 "contains"执行计划?

java - 椭圆曲线公钥(Java - bouncycaSTLe): How to get 32 byte X and 32 byte Y value from ECPublicKey. toString()