我正在创建一个涉及创建/检索/更新/删除操作的应用程序。
因此,对于添加和编辑方法,我想重新使用两个函数中相同的核心组件。所以我创建了一个共享的抽象类,然后我的添加和编辑类扩展了共享,所以它们每个都有相同的核心,但仍然可以有差异。
我使用newInstance方法实例化这些对象/片段,这是我通常传入参数的地方,将它们设置为Bundle,然后在onCreateView方法中读回它们。
但是我需要能够引入共享类的参数,但我不能因为它是抽象的,当我实例化对象时,我实例化了Edit和Add对象,这意味着只有子类可以有参数。
解决这个问题的惯例是什么?
public abstract class SharedStuffDialogFragment extends DialogFragment {
protected MyObject mMyObject; //I'd like to be able to init. this
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View contentView = inflater.inflate(R.layout.shared_layout, container, false);
//do a bunch of other stuff here, sharable attributes
initOtherThings(savedInstanceState);
return contentView;
}
protected abstract void initOtherThings(Bundle savedInstanceState);
}
然后例如,添加类:
public class AddDialogFragment extends SharedStuffDialogFragment {
private static final String ARGUMENT_OBJECT = "argument_object";
private MyObject mMyObject;
public static AddDialogFragment newInstance(MyObject object) {
Bundle args = new Bundle();
args.putParcelable(ARGUMENT_OBJECT, object); //would really rather set this to shared
AddDialogFragment fragment = new AddDialogFragment();
fragment.setArguments(args);
return fragment;
}
@Override
protected void initOtherThings(Bundle savedInstanceState) {
mMyObject = getArguments().getParcelable(ARGUMENT_OBJECT);
//do stuff unique to add operations
}
}