MVP方法 - Android

时间:2017-09-15 11:28:13

标签: android mvvm mvp

我正在尝试在示例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;
    }
}

2 个答案:

答案 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文件,

第二次一个视图,它是将属性绑定到您在上面的代码中执行的模型部分的地方

第三这个模式是你应该检索信息的地方,所以你可以做的是做一个单独的类,你把上面的方法放在你的类中并调用方法