public class CartMain extends BasicFragment implements EditMenuInterface {...}
public abstract class BasicFragment extends Fragment {
protected ArrayList<Integer> selectedElements = new ArrayList<>();
protected RecyclerView listView;
protected ObservableArrayList<?> list;
protected boolean editMode = false;;
protected View managementMenu
... methods...
}
我想在CartMain类的BasicFragments中初始化参数,但是由于我不能使用构造函数,所以我不知道如何正确地做到这一点。
我正在这样做:
CartMain Class
@Override
public View onCreateView...{
mainView = inflater.inflate(R.layout.fragment_cart_main, container, false);
listView = view.findById...
list = cartDAO.getAll();
listView = mainView.findViewById(R.id.cart_list_itemCarts);
}
但是我不知道它是否正确,因为当我们使用构造函数时,它会强制性地初始化超类的属性,而使用onCreateView时它不会是易感性的。
答案 0 :(得分:0)
关于片段的几点要点:
public CartMain(){}
没有该 public 空构造函数,如果将调用活动放在Pause上,并且一段时间后被垃圾回收,则Android将会崩溃。
Android将在主线程的onResume中寻找该空的公共构造函数以重新实例化您的片段。
onCreateView
中初始化的变量值将在onStart,onPause等之后用作默认值。不是变量,在类构造函数中。因此,请在onCreateView中进行所有默认初始化。
您可以在超类的onCreateView中进行操作。
如果在超类中进行了一些初始化,则在子类中的onCreateView的开头添加super方法。
@Override
public View onCreateView(LayoutInflator li...{
super(li... // This will call onCeateView in your super class
... // where you can initialize 'common-for-all' values, setup listeners
...
// do everything else
return mainView;
}
return mainView;
的末尾。您返回的视图就是将出现在屏幕上的视图。请勿通过onCreateView外部的构造函数使用初始化,因为如果由于应用程序暂停而被垃圾回收,则它将无法重新初始化。
要验证您的片段是否正常工作,请使用“开发人员”模式(使用以下设置:“限制-禁止后台进程,不将活动保留在内存中”或类似设置)。