【总结】Android Fragment MVC思路

来源:互联网 发布:mac office 登陆激活 编辑:程序博客网 时间:2024/06/06 21:00

Android 中 Activity

显示界面可以由几个Fragment拼成的

每个Fragment都有自己的布局和处理布局的逻辑。

使用了Fragment将视图分拆成模板然后处理逻辑就好像

在Activity这个蓝图上拼接板块一样。因为Fragment还可以在其他界面重用。感觉满满的View解耦。

下面给出一种辅助Fragment处理逻辑的模式方法。看上去遵循了MVC的思想。

 

Presenter(C)——Fragment(V)


public abstract classBaseFragment<Textends Presenter<U>,U extends Ui> extends Fragment {

   
private Tpresenter;

    public abstract
T createPresenter();

    public abstract
U getUi();

    protected
BaseFragment() {
       
presenter =createPresenter();
   
}

   
public TgetPresenter() {
       
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 interfaceUi {
}

 

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