【总结】Android Fragment MVC思路

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值