Android Fragment MVC思路

来源:互联网 发布:moment.js 计算时间差 编辑:程序博客网 时间:2024/06/05 20:29

Android 中 Activity
显示界面可以由几个Fragment拼成的
每个Fragment都有自己的布局和处理布局的逻辑。
使用了Fragment将视图分拆成模板然后处理逻辑就好像
在Activity这个蓝图上拼接板块一样。因为Fragment还可以在其他界面重用。感觉满满的View解耦。
下面给出一种辅助Fragment处理逻辑的模式方法。看上去遵循了MVC的思想。

Presenter(C)——Fragment(V)

public abstract class BaseFragment<T extends Presenter<U>, U extends Ui> extends Fragment {    private T presenter;    public abstract T createPresenter();    public abstract U getUi();    protected BaseFragment() {        presenter = createPresenter();    }    public T getPresenter() {        return presenter;    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }    @Override    public void onAttach(Context context) {        super.onAttach(context);    }    @Override    public void onActivityCreated(Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        presenter.onUiReady(getUi());    }    @Override    public void onDestroyView() {        super.onDestroyView();        presenter.onUiDestroy(getUi());    }    @Override    public void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);    }}

UI接口 没有方法。仅仅起令牌的作用

public interface Ui {}

Presenter

public abstract class Presenter<U extends Ui> {    private U mUi;    public void onUiReady(U ui) {        mUi = ui;    }    public final void onUiDestroy(U ui) {        onUIUnready(ui);        mUi = null;    }    public void onUIUnready(U ui) {    }    public U getUi() {        return mUi;    }}

抽象出基础类放到UIBase包内
这里写图片描述

使用

public class ChatSessionFragment extends BaseFragment<ChatSessionPresenter, ChatSessionPresenter.ChatSessionUi> implements ChatSessionPresenter.ChatSessionUi {@Overridepublic ChatSessionPresenter createPresenter() {    return new ChatSessionPresenter();}@Overridepublic ChatSessionPresenter.ChatSessionUi getUi() {    return this;}}public class ChatSessionPresenter extends Presenter<ChatSessionPresenter.ChatSessionUi>{@Overridepublic void onUiReady(ChatSessionUi ui) {    super.onUiReady(ui);    AppApplication.getInstance().getmMessageBroadcastReceiver().addMessageNotiferListener(this);}@Overridepublic void onUIUnready(ChatSessionUi ui) {    super.onUIUnready(ui);}public interface ChatSessionUi extends Ui {    Context getContexts();    void refreshSessionList(List<Session> list);}}