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