基本上,我从其他片段创建了新的Fragment by Extended,因为我只想覆盖某些方法,但仍会继续使用其中的很多方法。
原始片段
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
调用扩展片段时
@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
那么这可能仅在扩展片段(onActivityCreated
)内触发RestaurantByFoodListFragment
而没有触发原始片段(RestaurantListFragment
)吗?
谢谢!
答案 0 :(得分:1)
您可以通过如下更改类来解决此问题:
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()
委托给新方法onActivityCreatedInternal()
,在子类中您不调用super.onActivityCreatedInternal()
。>
这将使您既可以(a)满足所有Fragment子类都调用super.onActivityCreated()
的要求,又可以(b)通过覆盖被覆盖的方法来完全覆盖行为“内部” onActivityCreated()
讨论给。