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