例子1:

1.M:bean:

package com.example.mvp4android.bean;public class UserBean {    private String username;    private String password;    public String getUsername() {        return username;    }    public UserBean() {        super();        // TODO Auto-generated constructor stub    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public UserBean(String username, String password) {        super();        this.username = username;        this.password = password;    }    public void setPassword(String password) {        this.password = password;    }}

2.M:interface

package com.example.mvp4android.biz;public interface IUserBiz {    public void login(String username, String password, OnLoginListener loginListener);}
  1. M: interface-clicklistener
package com.example.mvp4android.biz;import com.example.mvp4android.bean.UserBean;public interface OnLoginListener {    void loginSuccess(UserBean user);    void loginFailed();}

4.M: implement interface with use interface-clicklistener

package com.example.mvp4android.biz;import com.example.mvp4android.bean.UserBean;public class UserBiz implements IUserBiz {    @Override    public void login(final String username, final String password, final OnLoginListener loginListener) {        // TODO Auto-generated method stub        // 模拟子线程耗时操作        new Thread() {            @Override            public void run() {                try {                    Thread.sleep(2000);                } catch (InterruptedException e) {                    e.printStackTrace();                }                // 模拟登录成功                if ("zfq".equals(username) && "123".equals(password)) {                    UserBean user = new UserBean(username, password);                    loginListener.loginSuccess(user);                } else {                    loginListener.loginFailed();                }            }        }.start();    }}

5.V:interface

package com.example.mvp4android.view;import com.example.mvp4android.bean.UserBean;/** * view实现接口 * @author Administrator * */public interface IUserLoginView {    String getUserName();    String getPassword();    void clearUserName();    void clearPassword();    void showLoading();    void hideLoading();    void toMainActivity(UserBean user);    void showFailedError();}

6.P:Presenter

package com.example.mvp4android.presenter;import com.example.mvp4android.bean.UserBean;import com.example.mvp4android.biz.IUserBiz;import com.example.mvp4android.biz.OnLoginListener;import com.example.mvp4android.biz.UserBiz;import com.example.mvp4android.view.IUserLoginView;import android.os.Handler;public class UserLoginPresenter {    private IUserBiz biz;    private IUserLoginView loginView;    private Handler mHandler = new Handler();    public UserLoginPresenter(IUserLoginView loginView) {        super();        this.biz = new UserBiz();        this.loginView = loginView;    }    public void login() {        loginView.showLoading();        biz.login(loginView.getUserName(), loginView.getPassword(), new OnLoginListener() {            @Override            public void loginSuccess(final UserBean user) {                // TODO Auto-generated method stub                // 需要在UI线程执行                mHandler.post(new Runnable() {                    @Override                    public void run() {                        loginView.toMainActivity(user);                        loginView.hideLoading();                    }                });            }            @Override            public void loginFailed() {                // TODO Auto-generated method stub                // 需要在UI线程执行                mHandler.post(new Runnable() {                    @Override                    public void run() {                        loginView.showFailedError();                        loginView.hideLoading();                    }                });            }        });    }    public void clear() {        loginView.clearUserName();        loginView.clearPassword();    }}

7.V/C:Activity

package com.example.mvp4android.activity;import com.example.mvp4android.R;import com.example.mvp4android.bean.UserBean;import com.example.mvp4android.presenter.UserLoginPresenter;import com.example.mvp4android.view.IUserLoginView;import android.annotation.SuppressLint;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.View;import android.view.View.OnClickListener;import android.widget.AutoCompleteTextView;import android.widget.Button;import android.widget.EditText;import android.widget.ProgressBar;import android.widget.Toast;@SuppressLint("NewApi")public class LoginActivity extends ActionBarActivity implements IUserLoginView {    AutoCompleteTextView tv_email;    EditText et_password;    Button btn_email_sign_in_button;    Button btn_email_clear_button;    ProgressBar login_progress;    private UserLoginPresenter mUserLoginPresenter = new UserLoginPresenter(this);    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_login);        tv_email = (AutoCompleteTextView) findViewById(R.id.email);        et_password = (EditText) findViewById(R.id.password);        btn_email_sign_in_button = (Button) findViewById(R.id.email_sign_in_button);        btn_email_sign_in_button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                mUserLoginPresenter.login();            }        });        btn_email_clear_button = (Button) findViewById(R.id.email_clear_button);        btn_email_clear_button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                mUserLoginPresenter.clear();            }        });        login_progress=(ProgressBar)findViewById(R.id.login_progress);    }    @Override    public String getUserName() {        // TODO Auto-generated method stub         return tv_email.getText().toString();    }    @Override    public String getPassword() {        // TODO Auto-generated method stub         return et_password.getText().toString();    }    @Override    public void clearUserName() {        // TODO Auto-generated method stub        tv_email.setText("");    }    @Override    public void clearPassword() {        // TODO Auto-generated method stub        et_password.setText("");    }    @Override    public void showLoading() {        // TODO Auto-generated method stub        login_progress.setVisibility(View.VISIBLE);    }    @Override    public void hideLoading() {        // TODO Auto-generated method stub        login_progress.setVisibility(View.GONE);    }    @Override    public void toMainActivity(UserBean user) {        // TODO Auto-generated method stub        Toast.makeText(this, user.getUsername() + " login success , to MainActivity", Toast.LENGTH_SHORT).show();    }    @Override    public void showFailedError() {        // TODO Auto-generated method stub        Toast.makeText(this, "login failed", Toast.LENGTH_SHORT).show();    }}

===================================

例子2:

1.Bean

package com.example.mvpinandroid.bean;//实体类public class NewsInfoBean {private int id;private String title;private String content;public NewsInfoBean(int id, String title, String content) {    super();    this.id = id;    this.title = title;    this.content = content;}public int getId() {    return id;}public void setId(int id) {    this.id = id;}public String getTitle() {    return title;}public void setTitle(String title) {    this.title = title;}public String getContent() {    return content;}public void setContent(String content) {    this.content = content;}public NewsInfoBean() {    super();    // TODO Auto-generated constructor stub}}

2.logic

package com.example.mvpinandroid.logic;import java.util.List;import com.example.mvpinandroid.bean.NewsInfoBean;public interface INewsInfoLogic {    //业务方法    public void readNews(int nowIndex,OnShowNewsListener listener);    public void addNews();}

3.interface

package com.example.mvpinandroid.logic;import java.util.List;import com.example.mvpinandroid.bean.NewsInfoBean;public interface OnShowNewsListener {    void showTextNews();    void showPhotoNews();}

4.impl

package com.example.mvpinandroid.logic;import java.util.List;import com.example.mvpinandroid.bean.NewsInfoBean;import android.util.Log;public class NewsInfoLogic implements INewsInfoLogic {    @Override    public void readNews(int nowIndex, OnShowNewsListener listener) {        // TODO Auto-generated method stub        // 具体的业务逻辑        int pos = nowIndex;        if (pos % 2 == 0) {            listener.showTextNews();        } else {            listener.showPhotoNews();        }    }    @Override    public void addNews() {        // TODO Auto-generated method stub        //        Log.i("XXX", "addNews的业务逻辑");    }}

5.interface 4 view

package com.example.mvpinandroid.view;import com.example.mvpinandroid.bean.NewsInfoBean;//Presenter与View交互是通过接口public interface iMainView {    /** * 该操作需要什么?(getUserName, getPassword) * 该操作的结果,对应的反馈?(toMainActivity,showFailedError) * 该操作过程中对应的友好的交互?(showLoading, hideLoading) * * @param title */    // 跳转展示文字界面    void showText(String title);    // 跳转展示图片界面    void showPhoto(String title);    // 其他一些View的处理    void addItemData();    NewsInfoBean getNowBean(int position);}

6.presenter

package com.example.mvpinandroid.presenter;import java.util.List;import com.example.mvpinandroid.bean.NewsInfoBean;import com.example.mvpinandroid.logic.INewsInfoLogic;import com.example.mvpinandroid.logic.NewsInfoLogic;import com.example.mvpinandroid.logic.OnShowNewsListener;import com.example.mvpinandroid.view.iMainView;import android.os.Handler;import android.widget.Toast;//Presenter与View交互是通过接口/** * Presenter是用作Model和View之间交互的桥梁,那么应该有什么方法呢? * * 其实也是主要看该功能有什么操作 presenter完成二者的交互,那么肯定需要二者的实现类。 * 大致就是从View中获取需要的参数,交给Model去执行业务方法,执行的过程中需要的反馈,以及结果,再让View进行做对应的显示。 * * @author Administrator * */public class NewsInfoPresenter {    INewsInfoLogic iNewsInfoLogic;//用于访问业务逻辑的    iMainView iMainView;//用于访问相关实现类 到时候传入实现相关接口的aty    NewsInfoBean mNewsInfoBean;    public NewsInfoPresenter(iMainView iMainView) {        super();        // 实例化业务逻辑实现类        this.iNewsInfoLogic = new NewsInfoLogic();        // 传入供访问的view接口        this.iMainView = iMainView;    }    public NewsInfoPresenter() {        // TODO Auto-generated constructor stub    }    /** * 自己定义的业务逻辑 * * @param nowIndex */    public void doClickNewsInfo(int nowIndex) {        mNewsInfoBean = iMainView.getNowBean(nowIndex);        // 业务逻辑调用相关方法        iNewsInfoLogic.readNews(nowIndex, new OnShowNewsListener() {            @Override            public void showTextNews() {                // TODO Auto-generated method stub                // 通过view接口操作view                iMainView.showText(mNewsInfoBean.getTitle());            }            @Override            public void showPhotoNews() {                // TODO Auto-generated method stub                iMainView.showPhoto(mNewsInfoBean.getTitle());            }        });    }    public void addNewsInfo() {        iNewsInfoLogic.addNews();        iMainView.addItemData();    }}

7.adapter

package com.example.mvpinandroid.adapter;import java.util.List;import com.example.mvpinandroid.R;import com.example.mvpinandroid.bean.NewsInfoBean;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class MyListAdapter extends BaseAdapter {    private List<NewsInfoBean> mNewsInfoBeans;    Context mContext;    public MyListAdapter(List<NewsInfoBean> mNewsInfoBeans, Context mContext) {        super();        this.mNewsInfoBeans = mNewsInfoBeans;        this.mContext = mContext;    }    @Override    public int getCount() {        // TODO Auto-generated method stub        return mNewsInfoBeans.size();    }    @Override    public Object getItem(int position) {        // TODO Auto-generated method stub        return mNewsInfoBeans.get(position);    }    @Override    public long getItemId(int position) {        // TODO Auto-generated method stub        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        // TODO Auto-generated method stub        ViewHolder viewHolder;        NewsInfoBean newsInfoBean = mNewsInfoBeans.get(position);        if (convertView == null) {            LayoutInflater layoutInflater = LayoutInflater.from(mContext);            convertView = layoutInflater.inflate(R.layout.list_item, null);            viewHolder = new ViewHolder();            viewHolder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);            viewHolder.tv_content = (TextView) convertView.findViewById(R.id.tv_content);            convertView.setTag(viewHolder);        } else {            viewHolder = (ViewHolder) convertView.getTag();        }        viewHolder.tv_title.setText(newsInfoBean.getTitle());        viewHolder.tv_content.setText(newsInfoBean.getContent());        return convertView;    }    class ViewHolder {        TextView tv_title;        TextView tv_content;    }    public void refreshData(List<NewsInfoBean> mNewsInfoBeans) {        this.mNewsInfoBeans = mNewsInfoBeans;        this.notifyDataSetChanged();    }}

8.aty

package com.example.mvpinandroid;import android.support.v7.app.ActionBarActivity;import java.util.ArrayList;import java.util.List;import com.example.mvpinandroid.adapter.MyListAdapter;import com.example.mvpinandroid.bean.NewsInfoBean;import com.example.mvpinandroid.presenter.NewsInfoPresenter;import com.example.mvpinandroid.view.iMainView;import android.annotation.SuppressLint;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;@SuppressLint("NewApi")public class MainActivity extends ActionBarActivity implements iMainView, OnItemClickListener,OnClickListener {    MyListAdapter myListAdapter;    List<NewsInfoBean> mNewsInfoBeans = new ArrayList<>();    private NewsInfoPresenter mNewsInfoPresenter = new NewsInfoPresenter(this);    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        for (int i = 0; i < 25; i++) {            NewsInfoBean newsInfoBean = new NewsInfoBean(i, "app" + i, "apping" + i);            mNewsInfoBeans.add(newsInfoBean);        }        initViews();    }    private void initViews() {        // TODO Auto-generated method stub        Button btn=(Button) findViewById(R.id.btn);        btn.setOnClickListener(this);        ListView listview = (ListView) findViewById(R.id.listview);        myListAdapter = new MyListAdapter(mNewsInfoBeans, MainActivity.this);        listview.setAdapter(myListAdapter);        listview.setOnItemClickListener(this);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();        if (id == R.id.action_settings) {            return true;        }        return super.onOptionsItemSelected(item);    }    @Override    public void showText(String  title) {        // TODO Auto-generated method stub        Toast.makeText(this, "点击了文字新闻,跳转"+title+"详细页", Toast.LENGTH_SHORT).show();    }    @Override    public void showPhoto(String  title) {        // TODO Auto-generated method stub        Toast.makeText(this, "点击了图片新闻,跳转"+title+"图片展示页", Toast.LENGTH_SHORT).show();    }    @Override    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {        // TODO Auto-generated method stub        mNewsInfoPresenter.doClickNewsInfo(position);    }    @Override    public void addItemData() {        // TODO Auto-generated method stub        for (int i = 0; i < 3; i++) {            mNewsInfoBeans.add(new NewsInfoBean(i*100, String.valueOf(i*200), String.valueOf(i*300)));        }        myListAdapter.refreshData(mNewsInfoBeans);    }    @Override    public void onClick(View v) {        // TODO Auto-generated method stub        mNewsInfoPresenter.addNewsInfo();    }    @Override    public NewsInfoBean getNowBean(int position) {        // TODO Auto-generated method stub        return mNewsInfoBeans.get(position);    }}

下载:http://download.csdn.net/detail/richiezhu/9433038

更多相关文章

  1. Android(安卓)Http通信(使用 标准Java接口)及解析Json
  2. Android(安卓)P Android.dp添加逻辑判断
  3. Android中Parcelable接口用法
  4. Android(安卓)复制到剪切板功能
  5. Android(安卓)GPS架构分析
  6. Android(安卓)UI系列:关于按钮点击事件
  7. Android(安卓)泛型使用
  8. Android语音识别功能使用总结
  9. android hessian

随机推荐

  1. jni 获得 android 系统属性
  2. goolge 地图地址位置解析
  3. android(2)(循环发送短信)
  4. Android(安卓)UI编辑器 Unhandled event
  5. Android: 屏幕截图
  6. Android中数据的保存和提取
  7. Android中和service进行本地通讯
  8. Android(安卓)如何获取最顶端的Top Activ
  9. Different ways to access HTTP resource
  10. Android之canvas详解