【转载】android中MVP模式

转载地址: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();  
         }  

    }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章