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 {
@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);
}
}