【转载】android中MVP模式
来源:互联网 发布:不符合淘宝认证要求 编辑:程序博客网 时间:2024/05/20 10:10
转载地址:http://blog.csdn.net/knxw0001/article/details/39637273#comments
1. 明确需求,界面如下:可存,可根据id读取数据。
包结构图
2. 建立bean
public class UserBean { private String mFirstName; private String mLastName; public UserBean(String firstName, String lastName) { this. mFirstName = firstName; this. mLastName = lastName; } public String getFirstName() { return mFirstName; } public String getLastName() { return mLastName; } }
- 建立model(处理业务逻辑,这里指数据读写),先写接口,后写实现
public interface IUserModel { void setID(int id); void setFirstName(String firstName); void setLastName(String lastName); int getID(); UserBean load(int id);// 通过id读取user信息,返回一个UserBean }
实现不在这里写了。
- 建立view(更新ui中的view状态),这里列出需要操作当前view的方法,也是接口
public interface IUserView { int getID(); String getFristName(); String getLastName(); void setFirstName(String firstName); void setLastName(String lastName); }
- 建立presenter(主导器,通过iView和iModel接口操作model和view),activity可以把所有逻辑给presenter处理,这样java逻辑就从手机的activity中分离出来。
public class UserPresenter { private IUserView mUserView; private IUserModel mUserModel; public UserPresenter(IUserView view) { mUserView = view; mUserModel = new UserModel(); } public void saveUser( int id, String firstName, String lastName) { mUserModel.setID(id); mUserModel.setFirstName(firstName); mUserModel.setLastName(lastName); } public void loadUser( int id) { UserBean user = mUserModel.load(id); mUserView.setFirstName(user.getFirstName()); // 通过调用IUserView的方法来更新显示 mUserView.setLastName(user.getLastName()); } }
- activity中实现iview接口,在其中操作view,实例化一个presenter变量。
public class MainActivity extends Activity implements OnClickListener,IUserView { UserPresenter presenter; EditText id,first,last; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. activity_main); findViewById(R.id. save).setOnClickListener( this); findViewById(R.id. load).setOnClickListener( this); id = (EditText) findViewById(R.id. id); first = (EditText) findViewById(R.id. first); last = (EditText) findViewById(R.id. last); presenter = new UserPresenter( this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id. save: presenter.saveUser(getID(), getFristName(), getLastName()); break; case R.id. load: presenter.loadUser(getID()); break; default: break; } } @Override public int getID() { return new Integer( id.getText().toString()); } @Override public String getFristName() { return first.getText().toString(); } @Override public String getLastName() { return last.getText().toString(); } @Override public void setFirstName(String firstName) { first.setText(firstName); } @Override public void setLastName(String lastName) { last.setText(lastName); } }
所谓的mvp,即是(model-处理业务逻辑(主要是数据读写,或者与后台通信(其实也是读写数据)),view-处理ui控件,presenter-主导器,操作model和view)
需求,这个是《android开发必知的50个诀窍》一书中的mvp章节的需求。
在splash页面中,判断是否有网络连接,有则跳到下个页面,无则弹出一条消息通知用户,同时在检查网络是否正常的期间显示一个进度条。- 类目录结构
3. model接口和实现 public interface INetConnect { boolean isNetConnect( Context context); } public class NetConnect implements INetConnect { @Override public boolean isNetConnect(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context. CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager .getActiveNetworkInfo(); if (mNetworkInfo != null) { return mNetworkInfo.isAvailable(); } } return false; } } 4. view接口 public interface ISplashView { void showProcessBar(); void hideProcessBar(); void showNetError(); void startNextActivity(); } 5. presenter实现 public class SplashPresenter { private INetConnect connect; private ISplashView iView; public SplashPresenter(ISplashView iView){ this. iView = iView; connect = new NetConnect(); } public void didFinishLoading(Context context){ iView.showProcessBar(); if( connect.isNetConnect(context)){ iView.startNextActivity(); } else{ iView.showNetError(); } iView.hideProcessBar(); } } 6.activity中代码 public class MainActivity extends Activity implements ISplashView{ SplashPresenter presenter; private ProgressDialog progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. activity_main); presenter = new SplashPresenter( this); } @Override protected void onResume() { super.onResume(); presenter.didFinishLoading( this); } @Override public void showProcessBar() { if ( progressBar == null) { progressBar = new ProgressDialog( this); progressBar.setCancelable( true); progressBar.setCanceledOnTouchOutside( true); progressBar.setMessage( "更新数据中,请稍后" ); } progressBar.show(); } @Override public void hideProcessBar() { progressBar.hide(); } @Override public void showNetError() { Toast. makeText(this, "暂无网络", Toast.LENGTH_SHORT).show(); } @Override public void startNextActivity() { Toast. makeText(this, "跳到下个activity", Toast.LENGTH_SHORT).show(); } }
0 0
- 【转载】android中MVP模式
- android中MVP模式
- android中MVP模式
- android中MVP模式
- android中MVP模式
- android中MVP模式
- Android开发中 MVP模式
- android中mvp模式使用
- Android中MVP模式、MVC模式
- Android中单元测试 Robolectric + MVP模式
- android中MVP模式(一)
- Android中使用MVP模式简介
- Android开发中MVP模式浅析
- 在android中使用MVP模式
- Android 中如何使用MVP设计模式
- Android中MVP设计模式实例
- android中MVP模式(一)
- Android开发中使用MVP模式
- 停止Service的stopSelf(int)
- 判断复选框是否被选中
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
- OpenSSH, ssh成功 sftp失败的可能原因
- sys 忘密码
- 【转载】android中MVP模式
- Android内存泄漏分析及实践(二)
- 自定义时间组件
- 浅谈 MVP in Android
- Android Volley增加Https支持,允许SSL
- Unmarshalling unknown type code 7667758 at offset 420
- js-全选
- 最常用的vim快捷键
- 马尔可夫决策过程MDP