我正在尝试在示例android项目中实现MVP架构。
您是否可以推荐我如何分解此代码,以在MVP上采用更好的方法。
我可以创建一个接口以具有setContactinfo()方法,但无法想到任何其他方法。
这是列表视图的列表项的详细信息。我从另一个活动中获取数据。
谢谢您的建议。
package com.salesi.coding;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import java.util.ArrayList;
import butterknife.Bind;
import butterknife.ButterKnife;
public class ContactDetails extends AppCompatActivity {
@Bind(R.id.tvTitle) protected TextView mTitle;
@Bind(R.id.tvFirstName) protected TextView mFirstName;
@Bind(R.id.tvLastName) protected TextView mLastName;
@Bind(R.id.tvJobTitle) protected TextView mJobTitle;
@Bind(R.id.tvPhoneNUmber) protected TextView mPhoneNUmber;
@Bind(R.id.tvEmail) protected TextView mEmail;
@Bind(R.id.tvHobbies) protected TextView mHobbies;
@Bind(R.id.tvAddressLine1) protected TextView mAddressLine1;
Intent contactIntent;
Bundle contactBundle;
String title, firstName, lastName,jobTitle, phoneNumber, email, address, hobbies;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact_details);
ButterKnife.bind(this);
//Get the Bundle data.
contactIntent = getIntent();
contactBundle = contactIntent.getExtras();
hobbies = contactBundle.getString("hobbies");
title = contactBundle.getString("title");
firstName = contactBundle.getString("firstName");
lastName = contactBundle.getString("lastName");
jobTitle = contactBundle.getString("jobTitle");
phoneNumber = contactBundle.getString("phoneNumber");
email = contactBundle.getString("email");
address = contactBundle.getString("address");
setContactInfo();
}
private void setContactInfo(){
mTitle.setText(title);
mFirstName.setText(firstName);
mLastName.setText(lastName);
mJobTitle.setText(jobTitle);
mPhoneNUmber.setText(phoneNumber);
mEmail.setText(email);
mHobbies.setText(hobbies.toString());
mAddressLine1.setText(address.toString());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.exitApp:
finish();
break;
default:
}
return true;
}
}
因此,在MVP真正受欢迎之前,Android项目的编写方式过于重(做太多工作)。活动将负责渲染UI,处理触摸事件,进行API呼叫,对上述API呼叫等回调等。
MVP受到流行的原因之一是因为它将关注点的分离引入了Android代码中。基本上,在MVP中,活动/片段(视图)仅对视图相关的方面,而诸如进行API呼叫和处理回调之类的事情被删除并移至主持人。
您上面提供的代码实际上很好,并且不需要主持人。
这是您何时使用MVP的情况:
联系方式来自您的后端服务器。ContactDetailsactivity将告知ContactDetailspresenter,需要详细信息。ContactDetailspresenter将向后端服务器提出请求。一旦ContactDetailsPresenter从服务器获得成功的响应,它将告知ContactDetailsactivity,详细信息已被获取,并将提供必要的详细信息来访问ContactDetailsactivity。ContactDetailSactivity将使用详细信息更新UI。
对于MVP(模型视图 - 列表)架构模式,您应该拥有:模型,视图,演示者
首先,您有模型部分,并且您的操作正确完成了,即XML文件,
second 一个视图,它是将属性绑定到您在上面的代码中所做的模型部分的地方
第三您应该检索的位置的模式,因此您可以做的是将方法放在上面的方法中,然后将方法放在同类中,并调用方法