MVP的模板

首先是Presenter:

public class DetailPresenter {
    DetailViewLayer mViewLayer;
    DetailModule mModule;
    String mAppPackageName;

    public DetailPresenter(String appPackageName, DetailViewLayer viewLayer) {
        this.mViewLayer = viewLayer;
        this.mAppPackageName = appPackageName;
    }

    void onActivityCreate() {
        /**
         * 初始化module
         */
        mModule = new DetailModule();
        loadData();
    }

    void onActivityDestroyed() {
        // TODO 目前什么都不做
    }

    void loadData() {
        // load data from module and let view show them
        mModule.query(mAppPackageName, new OnDataLoadedListener() {

            @Override
            public void onDataLoaded(List<AppDetailBean> appDetailBeanList) {
                AdapterView.OnItemClickListener onitemClickListener = new AdapterView.OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {

                    }
                };

                mViewLayer.show(appDetailBeanList, onitemClickListener);
            }

            @Override
            public void onDataLoadFailed(Throwable e) {

            }
        });

    }

    public interface OnDataLoadedListener {
        void onDataLoaded(List<AppDetailBean> cardViewBeanList);

        void onDataLoadFailed(Throwable e);
    }
}

然后是VIewLayer:

public class MyViewLayer implements IMyView {
    GridView mGridView;
    BaseAdapter mAdapter;
    Context context;

    public MyViewLayer(Context context) {
        this.context = context;
        mGridView = new GridView(context);
        mGridView.setNumColumns(5);
        mGridView.setVerticalSpacing(60);
        mGridView.setPadding(100, 150, 100, 50);
    }

    @Override
    public void show(List<Bean> beanList,
            AdapterView.OnItemClickListener onclickListener) {
        mAdapter = new MyBaseAdapter(context, beanList);
        mGridView.setAdapter(mAdapter);
        mGridView.setOnItemClickListener(onclickListener);
        mAdapter.notifyDataSetChanged();
    }

    @Override
    public void updateAdapterData(List<Bean> beanList,
            AdapterView.OnItemClickListener onclickListener) {
        show(beanList, onclickListener);
    }

    public View getInnerView() {
        return mGridView;
    }

}

在Activity中这样使用:

public class Content2Activity extends BaseActivity {
    Presenter mPresenter;
    IMyView mMyViewLayer;
    PageEnum mWhichPage;
    LinearLayout mll;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_content2);
        mll = (LinearLayout) findViewById(R.id.ll_content2);

        /**
         * 从传进来的intent得到whichpage
         */
        String whichPage = getIntent().getStringExtra("pageEnum");
        if (whichPage != null) {
            mWhichPage = PageEnum.valueOf(whichPage);
        }
        if (mWhichPage == null) {
            mWhichPage = PageEnum.gushixiaochengbao;
        }
        setBackground(mWhichPage);
        
        

        mMyViewLayer = new MyViewLayer(this);
        mPresenter = new Presenter(mWhichPage, mMyViewLayer);

        mPresenter.onActivityCreate();
        mll.addView(mMyViewLayer.getInnerView());
        // 要刷新吗? A:不用
    }

    /**
     * 根据pageEnum来设置背景图片
     * 
     * @param pageEnum
     */
    private void setBackground(PageEnum pageEnum) {
        int backgroundResId = -1;
        switch (pageEnum) {
        case anquanxiaozhishi:
            backgroundResId = R.drawable.safetytipsbg;
            break;
        case anzhuoxitong:
            //不应执行到这里
            break;
        case baibaoxiang:
            //不应执行到这里
            break;
        case dianduxuexi:
            //不应执行到这里
            break;
        case dongmanxuexileyuan:
            //不应执行到这里
            break;
        case gushi:
            backgroundResId = R.drawable.back_gushi;
            break;
        case gushixiaochengbao:
            backgroundResId = R.drawable.storycastlebg;
            break;
        case kexue:
            backgroundResId = R.drawable.back_kexue;
            break;
        case meishu:
            backgroundResId = R.drawable.back_meishu;
            break;
        case quweixiaomuwu:
            backgroundResId = R.drawable.funcabinsbg;
            break;
        case shehui:
            backgroundResId = R.drawable.back_shehui;
            break;
        case shuxue:
            backgroundResId = R.drawable.back_shuxue;
            break;
        case woshangyoueryuan:
            backgroundResId = R.drawable.nurserybg;
            break;
        case xiaoxiaoguoxuejia:
            backgroundResId = R.drawable.sinologybg;
            break;
        case yingyu:
            backgroundResId = R.drawable.back_yingyu;
            break;
        case yinyuexiaotiancai:
            backgroundResId = R.drawable.musicgeniusbg;
            break;
        case yuyan:
            backgroundResId = R.drawable.back_yuyan;
            break;
        case zhishileyuan:
            //不应执行到这里
            break;
        default:
            break;
        }
        mll.setBackgroundResource(backgroundResId);
    }
}
原文地址:https://www.cnblogs.com/BlogCommunicator/p/7390111.html