Android(安卓)MVP Demo
16lz
2021-12-04
例子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);}
- 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
更多相关文章
- Android(安卓)Http通信(使用 标准Java接口)及解析Json
- Android(安卓)P Android.dp添加逻辑判断
- Android中Parcelable接口用法
- Android(安卓)复制到剪切板功能
- Android(安卓)GPS架构分析
- Android(安卓)UI系列:关于按钮点击事件
- Android(安卓)泛型使用
- Android语音识别功能使用总结
- android hessian