我正在尝试在示例android项目中实现MVP架构。
你能否推荐我如何打破这段代码以获得更好的MVP方法。
我可以创建一个具有setContactInfo()方法的接口,但无法想到任何其他方法。
这是列表视图中List项的detailView。我从另一个活动中获取Bundle中的数据。
感谢您的建议。
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;
}
}
答案 0 :(得分:0)
因此,在MVP变得非常受欢迎之前,Android项目的编写方式是活动太重(做太多工作)。活动将负责呈现UI,处理触摸事件,进行API调用,具有所述API调用的回调等。
MVP受欢迎的原因之一是因为它引入了关注点分离到Android代码中。基本上,在MVP中,活动/片段(视图)仅支持与视图相关的方面,而诸如进行API调用和处理回调之类的内容被删除并移动到演示者。
您上面提供的代码实际上很好,并且不需要演示者。
以下是您何时使用MVP的情景:
联系人详细信息来自您的后端服务器。 ContactDetailsActivity将通知ContactDetailsPresenter需要详细信息。 ContactDetailsPresenter会向后端服务器发出GET请求。一旦ContactDetailsPresenter从服务器获得成功响应,它将通知ContactDetailsActivity已获取详细信息并将向ContactDetailsActivity提供必要的详细信息。 ContactDetailsActivity将使用详细信息更新UI。
答案 1 :(得分:0)
对于MVP(模型 - 视图 - 演示者)架构模式,您应该具有: 模特,A VIEW,演示者
首先你有模型部分,你已经正确完成了这是xml文件,
第二次一个视图,它是将属性绑定到您在上面的代码中执行的模型部分的地方
第三这个模式是你应该检索信息的地方,所以你可以做的是做一个单独的类,你把上面的方法放在你的类中并调用方法