设置扩展类的默认参数

时间:2016-05-29 12:58:07

标签: java android oop android-fragments design-patterns

我正在创建一个涉及创建/检索/更新/删除操作的应用程序。

因此,对于添加和编辑方法,我想重新使用两个函数中相同的核心组件。所以我创建了一个共享的抽象类,然后我的添加和编辑类扩展了共享,所以它们每个都有相同的核心,但仍然可以有差异。

我使用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
    }

}

0 个答案:

没有答案