安卓开发之架构理解(MVP)

学习自MVP架构

MVP的全称为Model-View-Presenter,即模型-视图-协调器(主持者)

  • Model:处理数据和业务逻辑等,如:数据库的操作,数据的请求加载,数据运算,JavaBean;
  • View:显示界面,展示结果等,一切与界面相关的,如:XML文件,Activity,Fragment,Dialog
  • Presenter:协调Model和View模块工作,处理交互

#程序示例

在ListView上展示文字和图片

  1. 主界面的布局:一个ListView,
  2. 定义一个Girl 的Bean对象
  3. 定义一个普通的适配器GirlAdapter,
  4. 自定义ListView中的Item的一个布局文件

##Model层
首先定义接口

public interface IGirlModel {
    void loadGirl(onGirlListener listener);//加载数据
    interface onGirlListener{//数据加载完成后的监听回调
        void onComplete(List<Girl> list);
    }
}

然后实现该接口

public class GirlModelImpl implements IGirlModel {
    @Override
    public void loadGirl(onGirlListener listener) {
        //加载数据
        List<Girl> list=new ArrayList<Girl>();
        list.add(new Girl(R.drawable.image1, "你是我的小苹果image1"));
        list.add(new Girl(R.drawable.image2, "你是我的小苹果image2"));
        list.add(new Girl(R.drawable.image3, "你是我的小苹果image3"));
        list.add(new Girl(R.drawable.image4, "你是我的小苹果image4"));
        list.add(new Girl(R.drawable.image5, "你是我的小苹果image5"));
        list.add(new Girl(R.drawable.image6, "你是我的小苹果image6"));
        list.add(new Girl(R.drawable.image7, "你是我的小苹果image7"));
        list.add(new Girl(R.drawable.image8, "你是我的小苹果image8"));
        //返回数据
        listener.onComplete(list);
    }
}

##View层

定义接口

/**
 * 视图层接口,定义与视图操作相关的接口
 */
public interface IGirlView {
    //加载的提示
    void showDialog();
    //显示加载后的数据
    void showGirls(List<Girl>list);
}

实现接口

public class MainActivity extends Activity implements IGirlView {
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
    private void initView() {
        listView = (ListView) findViewById(R.id.listview);
    }
    @Override
    public void showDialog() {
        Toast.makeText(this, "正在加载数据中。。。", Toast.LENGTH_LONG).show();
    }
    @Override
    public void showGirls(List<Girl> list) {
        listView.setAdapter(new GirlAdapter(this, list));
    }
}

##Persenter层
用于数据与视图的交互

public class GirlPresenter {
    // View 的引用
    IGirlView iGirlView;
    // Model的引用
    IGirlModel iGirlModel=new GirlModelImpl();
    public GirlPresenter(IGirlView iGirlView) {
        this.iGirlView = iGirlView;
    }
    public void feach() {
        if (iGirlModel != null && iGirlView != null) {
            // 显示进度条
            iGirlView.showDialog();
            // 加载数据
            iGirlModel.loadGirl(new onGirlListener() {
                @Override
                public void onComplete(List<Girl> list) {
                    // 返回数据,显示到View层
                    iGirlView.showGirls(list);
                }
            });
        }
    }
}

猜你喜欢

转载自blog.csdn.net/lwz45698752/article/details/81565358