创建新的Fragment

BaseFragment与BaseActivity内部设计类似, 具体可以参考 创建新的Activity. 这里只贴出关键代码以供参考.

声明:

public abstract  class BaseFragment<V extends BaseView, T extends BasePresenter<V>>
        extends RxFragment implements BaseView

缓存视图(省略部分与BaseActivity相同的逻辑):

private View parentView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    parentView = getLayoutInflater(savedInstanceState).inflate(getLayoutId(), null, false);
    ButterKnife.bind(this, parentView);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return parentView;
}

public View getParentView() {
    return parentView;
}

如何使用BaseFragment创建一个新的Fragment?

关于MVP方面的步骤与Activity一样, 这里只说明代码上, 使用BaseFragment与Android自带Fragment的区别.

BaseFragment同样有三个抽象方法:

    /**
     * 指定Fragment需加载的布局ID
     */
    protected abstract int getLayoutId();

    /**
     * 初始化方法, 类似OnCreate, 仅在此方法中做初始化操作, findView与事件绑定请使用ButterKnife
     */
    protected abstract void init(Bundle savedInstanceState);

    /**
     * 创建Presenter, 然后通过调用{@link #getPresenter()}来使用生成的Presenter
     */
    protected abstract T createPresenter();

与BaseActivity一样. 只需要实现上述三个方法, 而无需实现onCreate, onCreateView, onViewCreated等. 如下:

public class TestFragment extends BaseFragment {
    @Override
    protected int getLayoutId() {
        return R.layout.fragment_test;
    }

    @Override
    protected void init(Bundle savedInstanceState) {
    }

    @Override
    protected BasePresenter createPresenter() {
        return null;
    }
}

Last updated