【Android MVP】实践与分析 2 ,使用父类与泛型实践MVP

本文探讨了在Android中如何通过MVP模式实现Activity和Fragment的优化,介绍了一个Presenter基类和通用View基类的使用,强调了MVP模式在应对业务变化和代码复用方面的优势。通过将逻辑与视图分离,MVP模式使得程序员能够更高效地管理和维护代码。
摘要由CSDN通过智能技术生成

MVP模式
这里写图片描述

Presender 作为 View 与逻辑逻辑的桥梁

Android 模式中 Activity 实际上就是这个角色

ViewDelegate :view的代理。调用实例的view :xml,Linearlayout,自定view

如何使Activity 和 Fragment 成为优秀的 Presender

我定义了一下基类
Presender 基类,fragment与activity使用方法。
e.g

public abstract class BaseViewDelegateFragment<T extends BaseViewDelegate> extends Fragment {
   

    protected T mViewDelegate;

    public T getmViewDelegate() {
        return mViewDelegate;
    }

    @Override
    public final void onCreate(Bundle savedInstanceState) {
        //因为没有使用框架,在此处初始化View.使用泛型,调用View的方法,给view赋予生命周期
        createViewDelegate();
        //给view设置逻辑调用
        mViewDelegate.setFragment(this);
        super.onCreate(savedInstanceState);
    }

    /**
     * 创建viewdelegate,并绑定到fragment
     */
    protected abstract void createViewDelegate();

    @Override
    public View onCreateView(LayoutInflater inflater
    , ViewGroup container, Bundle savedInstanceState) {
        //创建view并,给view赋值
        mViewDelegate.create(inflater, null, savedInstanceState);
        return mViewDelegate.create(inflater, null, savedInstanceState);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onViewCreated(view, savedInstanceState);
        mViewDelegate.initWidget();//初始化组件
        mViewDelegate.initListener();//初始化组件监听
    }

    /*****************
      *presender 给view赋值生命周期 
      *其实很少会用到。
      *一般都是presender 生命周期调用 view的方法
      **********************/
    @Override
    public void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
    }

    @Override
    public void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        mViewDelegate.onPause();
    }

    public void popBack() {
        mViewDelegate.hideSoftInputMethod();
        FragmentUtil.popBackImmediate(getActivity());
    }

}

通用的View基类,适用与用户交互时候用

public abstract class BaseViewDelegate <P extends BaseViewDelegateFragment> implements IViewDelegate {
   

    /*************** INPUT METHOD **************************/
    InputMethodManager imm;

    /***************** 组件view ********************************************/
    protected final SparseArray<View> mViews = new SparseArray<View>();//保存view的容器类
    protected View rootView;//最外层的view

    public abstract int getRootLayoutId();

    /********** PRESENDER *************/
    protected P mFragment;

    public void setFragment(P mFragment) {
        this.mFragment = mFragment;
    }

    @Override
    public void create(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        int rootLayoutId = getRootLayoutId();
        rootView = inflater.inflate(rootLayoutId, container, false);
    }

    @Override
    public int getOptionsMenuId() {
        return 0;
    }

    //一些presender生命周期,不建议使用,但是用暂停handler很有效,
    //建议直接在presender生命周期,调用一些view的功能
    public void onCreate() {
    }
    public void onResume() {
    }

    @Override
    public View getRootView() {
        return rootView;
    }

    public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值