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(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onAttach(Contextcontext) {
super.onAttach(context);
}
@Override
public void onActivityCreated(BundlesavedInstanceState) {
super.onActivityCreated(savedInstanceState);
presenter.onUiReady(getUi());
}
@Override
public void onDestroyView() {
super.onDestroyView();
presenter.onUiDestroy(getUi());
}
@Override
public void onSaveInstanceState(BundleoutState) {
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 {
@Override public ChatSessionPresenter createPresenter() { return new ChatSessionPresenter(); } @Override public ChatSessionPresenter.ChatSessionUi getUi() { return this; }
}
public class ChatSessionPresenter extends Presenter<ChatSessionPresenter.ChatSessionUi>{
@Override public void onUiReady(ChatSessionUi ui) { super.onUiReady(ui); AppApplication.getInstance().getmMessageBroadcastReceiver().addMessageNotiferListener(this); } @Override public void onUIUnready(ChatSessionUi ui) { super.onUIUnready(ui); } public interface ChatSessionUi extends Ui { Context getContexts(); void refreshSessionList(List<Session> list); }
}