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

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值