【转载】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;       }  }
  1. 建立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      }  

实现不在这里写了。

  1. 建立view(更新ui中的view状态),这里列出需要操作当前view的方法,也是接口
public interface IUserView {       int getID();       String getFristName();       String getLastName();       void setFirstName(String firstName);       void setLastName(String lastName);  } 
  1. 建立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());       }  } 
  1. 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);       }  } 
  1. 所谓的mvp,即是(model-处理业务逻辑(主要是数据读写,或者与后台通信(其实也是读写数据)),view-处理ui控件,presenter-主导器,操作model和view)

  2. 需求,这个是《android开发必知的50个诀窍》一书中的mvp章节的需求。
    在splash页面中,判断是否有网络连接,有则跳到下个页面,无则弹出一条消息通知用户,同时在检查网络是否正常的期间显示一个进度条。

  3. 类目录结构
    这里写图片描述
    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
原创粉丝点击