轉載地址: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();
}
}