public class MainActivity extends AppCompatActivity {
    //text
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void sendMessage(View view) {
        //Grab input
        EditText editText = findViewById(R.id.editText);
        String message = editText.getText().toString();
        //Throw input onto the label
        TextView destinationText = findViewById(R.id.destinationText);
        destinationText.setText(message);
    }
}


该应用程序的用户界面带有EditText,Textview和按钮。该按钮将复制用户在EditText对象中键入的文本,并将其放置在TextView中。

MVP和MVVM似乎是当今最受欢迎的设计模式。

本着学习这些架构设计模式之一的精神,我该如何使这个最基本的应用程序适应MVP架构模式?

最佳答案

在开始编写任何代码之前,我绝对会建议您进行一些研究。如今,Android提供了许多有趣的应用程序架构,即使选择最适合您的应用程序并非易事,但这段旅程会让您学到很多东西。

一个很好的起点是Google在GitHub上的官方architecture sample projects。不仅您有许多不同的体系结构,例如MVP,MVVM,MVI,而且每种体系结构中都有一些有趣的变体。

另一方面,Android在简化创建大量库的尝试方面做得很好。这称为Android体系结构组件,而here you have some of their samples开始播放并采用其模式。

最后,如果您仍然决定使用MVP,则在您的示例中需要做的几件事:


您的MainActivity(视图)应实施该视图的合同(例如:MainViewContract)。
在该视图内,您应该通过实现MainPresenter的视图的引用获取对MainViewContract的引用。
MainPresenter还将执行合同(例如:MainPresenterContract)。


基本上,您需要的所有连接都已建立。 MainPresenter将负责业务处理View的输入和输出。在您的情况下,输入和输出非常简单:

输入(MainPresenterContract):


void copyText(String textToCopy);


输出(MainViewContract):


void showCopiedText(String copiedText);


当用户单击按钮时,您将通过演示者本地实例发送消息copyText。然后,演示者将获得该内容并执行调用showCopiedText的输出。由于主视图MainActivity实现了MainViewContract,因此您将在视图的本地方法中接收到输出消息,只需在Textview上绘制文本即可。

08-26 23:28