Android MVP 모드 실전 강좌
인터넷 에서 자 료 를 찾 아 다음 과 같이 정리 했다.
MVP 는 모델(Model),보기(View),사회자(Presenter)의 줄 임 말로 각각 항목 의 3 개의 서로 다른 모듈 을 대표 한다.
모델(Model):데이터 의 로드 나 저장 을 처리 합 니 다.예 를 들 어 네트워크 나 로 컬 데이터 베이스 에서 데 이 터 를 가 져 오 는 등;
보기(View):인터페이스 데이터 의 전 시 를 책임 지고 사용자 와 상호작용 을 합 니 다.
사회자(Presenter):코 디 네 이 터 에 해당 하 는 모델 과 보기 사이 의 다리 로 모델 과 보 기 를 분리 합 니 다.
아래 그림 에서 보 듯 이 View 와 Model 은 직접적인 상호작용 이 아니 라 Presenter 를 View 와 Model 간 의 교량 으로 사용한다.그 중에서 Presenter 는 Viwe 층 과 Model 층 의 Interface 인용 을 동시에 가지 고 있 고 View 층 은 Presenter 층 Interface 의 인용 을 가지 고 있다.View 층 의 한 인터페이스 가 일부 데 이 터 를 보 여 줘 야 할 때 먼저 Presenter 층 의 특정한 인 터 페 이 스 를 호출 한 다음 에 Presenter 층 은 Model 층 의 요청 데 이 터 를 호출 합 니 다.Model 층 데이터 로드 가 성공 한 후에 Presenter 층 의 리 턴 방법 으로 Presenter 층 데이터 로드 가 완료 되 었 음 을 알 립 니 다.마지막 으로 Presenter 층 은 View 층 의 인 터 페 이 스 를 호출 하여 로드 된 데 이 터 를 사용자 에 게 보 여 줍 니 다.이것 이 MVP 모델 의 전체 핵심 과정 이다.
MVP 모드 에는 보통 4 가지 요소 가 포함 되 어 있 습 니 다.
(1)View:UI 요 소 를 그립 니 다.사용자 와 상호작용 을 합 니 다(Android 에서 Activity 로 나타 납 니 다).
(2)View interface:View 가 실현 해 야 하 는 인터페이스,View 는 View interface 와 Presenter 를 통 해 상호작용 을 하고 결합 을 낮 추어 단원 테스트 를 편리 하 게 한다.
(3)모델:데 이 터 를 저장,검색,조작 하 는 것 을 책임 집 니 다(가끔 은 Model interface 를 실현 하여 결합 을 낮 춥 니 다).
(4)Presenter:View 와 Model 의 상호작용 의 중간 유대 로 서 사용자 와 의 상호작용 을 처리 하 는 책임 논리.
2.MVP 모드 의 사용
위의 간단 한 MVP 모드 의 UML 그림 은 그림 에서 알 수 있 듯 이 MVP 를 사용 하려 면 적어도 다음 과 같은 절 차 를 거 쳐 야 한다.
1.IPresenter 인 터 페 이 스 를 만 들 고 모든 업무 논리의 인 터 페 이 스 를 여기에 두 고 Presenter Compl 를 실현 합 니 다.(여기 서 업무 기능 을 편리 하 게 볼 수 있 습 니 다.인 터 페 이 스 는 여러 가지 실현 이 가능 하기 때문에 유닛 테스트 도 편리 합 니 다)
2.IView 인 터 페 이 스 를 만 들 고 모든 보기 논리의 인 터 페 이 스 를 여기에 놓 습 니 다.사실은 현 류 는 현재 Activity/Fragment 입 니 다.
3.UML 그림 을 통 해 알 수 있 듯 이 Activity 에는 IPresenter 가 포함 되 어 있 고 Presenter Compl 에는 IView 가 포함 되 어 있 으 며 Model 에 의존 하고 있다.Activity 에 서 는 IPresenter 에 대한 호출 만 보류 하고 다른 작업 은 모두 Presenter Compl 에 남아 서 이 루어 집 니 다.
4.모델 은 꼭 있어 야 하 는 것 은 아니 지만 반드시 View 와 Presenter 가 있 을 것 이다.
3.간단 한 MVP 예제
간단 한 사용자 로그 인 실현
효 과 는 다음 과 같 습 니 다:
먼저 자바 파일 의 디 렉 터 리 구 조 를 살 펴 보 겠 습 니 다.
1.Baen 가방
UserBean
package com.example.mvpe.bean;
/**
* Created by fendo on 2017/4/29.
*/
public class UserBean {
private String username;
private String userpwd;
public UserBean() {
}
public UserBean(String username, String userpwd) {
this.username = username;
this.userpwd = userpwd;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
}
2.Model 패키지IUserModel 클래스
package com.example.mvpe.model;
import com.example.mvpe.bean.UserBean;
/**
* Created by fendo on 2017/4/29.
*/
public interface IUserModel {
void setSid(int cid);
UserBean load(int sid);
void setUsername(String username);
void setUserpwd(String userpwd);
}
UserModelimp 클래스
package com.example.mvpe.model;
import android.provider.Settings;
import android.util.Log;
import android.util.SparseArray;
import com.example.mvpe.bean.UserBean;
/**
* Created by fendo on 2017/4/29.
*/
public class UserModelimp implements IUserModel{
private static final String ACTIVITY_TAG="UserModelimp";
private String username;
private String userpwd;
private int sid;
private SparseArray<UserBean> su=new SparseArray<UserBean>();
@Override
public void setSid(int cid) {
sid=cid;
}
@Override
public UserBean load(int sidy) {
sid=sidy;
UserBean ub=su.get(sid,new UserBean("not found",
"not found"));
return ub;
}
@Override
public void setUsername(String usernamey) {
username=usernamey;
}
@Override
public void setUserpwd(String userpwdy) {
userpwd=userpwdy;
UserBean usb=new UserBean(username,userpwd);
System.out.print(username+"----"+userpwd+"----"+sid);
Log.d(UserModelimp.ACTIVITY_TAG, "Start_OK"+username+"----"+userpwd+"----"+sid);
su.append(sid,usb);
}
}
3.persenter 패키지UserPersenter 클래스
package com.example.mvpe.presenter;
import android.util.Log;
import android.view.View;
import com.example.mvpe.bean.UserBean;
import com.example.mvpe.model.IUserModel;
import com.example.mvpe.model.UserModelimp;
import com.example.mvpe.view.IUserView;
/**
* Created by fendo on 2017/4/29.
*/
public class UserPersenter {
private static final String ACTIVITY_TAG="UserPersenter";
private IUserView iUserView;
private IUserModel iUserModel;
public UserPersenter(IUserView view){
iUserView=view;
iUserModel=new UserModelimp();
}
public void saveuser(int sid,String username,String userpwd){
iUserModel.setSid(sid);
iUserModel.setUsername(username);
iUserModel.setUserpwd(userpwd);
}
public void loaduser(int sid){
UserBean usb=iUserModel.load(sid);
Log.d(ACTIVITY_TAG, "loaduser: "+usb.getUsername());
iUserView.setUsername(usb.getUsername());
iUserView.setUserpwd(usb.getUserpwd());
}
}
4.뷰 백IUserView 클래스
package com.example.mvpe.view;
import com.example.mvpe.bean.UserBean;
/**
* Created by fendo on 2017/4/29.
*/
public interface IUserView {
int getID();
void setUsername(String username);
void setUserpwd(String userpwd);
String getUserpwd();
String getUsername();
}
UserActivity 클래스
package com.example.mvpe.view;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.example.mvpe.R;
import com.example.mvpe.presenter.UserPersenter;
import android.view.View.OnClickListener;
import android.widget.Toast;
/**
* Created by fendo on 2017/4/29.
*/
public class UserActivity extends Activity implements OnClickListener,IUserView{
private EditText userid;
private EditText username;
private EditText userpwd;
private Button read;
private Button write;
private UserPersenter usp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
usp=new UserPersenter(this);
setContentView(R.layout.activity_main);
findviewbyid();
read.setOnClickListener(this);
write.setOnClickListener(this);
}
public void findviewbyid(){
userid= (EditText) findViewById(R.id.userid);
username= (EditText) findViewById(R.id.usertext);
userpwd= (EditText) findViewById(R.id.userpwd);
read= (Button) findViewById(R.id.read);
write= (Button) findViewById(R.id.write);
}
@Override
public int getID() {
return Integer.parseInt(userid.getText().toString());
}
@Override
public void setUsername(String usernamcc) {
username.setText(usernamcc);
}
@Override
public void setUserpwd(String userpw) {
userpwd.setText(userpw);
}
@Override
public String getUserpwd() {
return userpwd.getText().toString();
}
@Override
public String getUsername() {
return username.getText().toString();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.read :
usp.loaduser(getID());
Toast.makeText(getApplicationContext(), " "+getID(), Toast.LENGTH_SHORT).show();
break;
case R.id.write:
usp.saveuser(getID(),getUsername(),getUserpwd());
Toast.makeText(getApplicationContext(), " "+getID()+"--"+getUsername()+"--"+getUserpwd(), Toast.LENGTH_SHORT).show();
break;
}
}
}
View 는 사용자 와 의 상호작용 만 처리 하고 데이터 와 관련 된 논리 적 조작 을 모두 Presenter 에 던 져 서 하 는 것 을 볼 수 있다.Presenter 는 Model 을 호출 하여 데 이 터 를 처리 한 후 IUserView 를 통 해 View 에 표 시 된 정 보 를 업데이트 합 니 다.다운로드:소스 코드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.