Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我初始化扩展片段时,如何停止父片段的onActivityCreated调用?_Java_Android_Android Fragments - Fatal编程技术网

Java 当我初始化扩展片段时,如何停止父片段的onActivityCreated调用?

Java 当我初始化扩展片段时,如何停止父片段的onActivityCreated调用?,java,android,android-fragments,Java,Android,Android Fragments,基本上,我是通过从另一个片段扩展来创建新片段的,因为我只是想覆盖一些方法,但仍然要使用很多方法 原始碎片 public class RestaurantListFragment extends BaseFragment { @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState)

基本上,我是通过从另一个片段扩展来创建新片段的,因为我只是想覆盖一些方法,但仍然要使用很多方法

原始碎片

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");
    }
}
所以当我从
PagerAdapter
这样调用extenses片段时

    @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
(我只想调用扩展片段)

这是我的日志

Res List Fragment:  :Original :onActivityCreated
Res By Food Fragment:  :Modify :onActivityCreated
Res List Fragment:  :Original :onActivityCreated
Res By Food Fragment:  :Modify :onActivityCreated
因此,在扩展片段(
RestaurantByFoodListFragment
)内仅触发器
onActivityCreated
,而不触发原始片段(
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");
    }
}
您在这里所做的是将
onActivityCreated()
委托给一个新方法
onActivityCreatedInternal()
,而在子类中,您不调用
super.onActivityCreatedInternal()


这将允许您(a)通过调用
super.onActivityCreated()
满足所有片段子类的要求,以及(b)通过重写被delgated到的方法,允许完全重写行为“内部”
onActivityCreated()

您可以通过调用
super.onActivityCreated()显式触发它(savedInstanceState);
,但这有什么关系呢?因为在原始片段中有一些我不想调用的函数
public class RestaurantByFoodListFragment extends RestaurantListFragment {
    @Override
    protected void onActivityCreatedInternal() {
        Log.d(TAG, " :Modify :onActivityCreated");
    }
}