Android 交互式APP 一个MVC案例

1. MVC介绍

  • M: Model 模块层,可以是一个Java类或者一个函数

  • V:View 视图层,在Android中即为Activity的布局xml文件

  • C: Control 控制层,为Android中的Activity

在这里插入图片描述

2. 功能分析

  • 建立一个下拉列表框,并指定其中的字符数组资源
  • 建立一个按钮,其中按钮的文字为指定的字符资源
  • 建立一个文本框,显示获取下拉列表字符后变换后的字符串

在这里插入图片描述

3. 实现

3.1 开发视图层

  1. constraint布局中拖入Linear(Vertical)布局,并以此拖入其他组件

在这里插入图片描述

  • 修改其中的ID

在这里插入图片描述
格式为 @+id/feature

  1. 建立字符串资源
<resources>
    <string name="app_name">CH02Demo</string>
    <string name="find_language">FIND LANGUAGE</string>
    <string name="language">Please Choose One!</string>
    <string-array name="feature">
        <item>fast</item>
        <item>easy</item>
        <item>new</item>
        <item>OO</item>
    </string-array>
</resources>
  1. 下拉列表需要指定entry属性

在这里插入图片描述

  1. 其他组件指定text属性

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:layout_editor_absoluteX="188dp"
        tools:layout_editor_absoluteY="0dp">

        <Spinner
            android:id="@+id/feature"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:entries="@array/feature" />

        <Button
            android:id="@+id/find_feature"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClickButton"
            android:text="@string/find_language"
            android:textSize="32sp" />

        <TextView
            android:id="@+id/language"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/language"
            android:textSize="30sp" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

3.2 开发控制层(添加按钮响应事件)

  1. 指定button的onClick属性

在这里插入图片描述
2. 在Activity中添加public函数与onClick指定的名字一致

在这里插入图片描述

3.3 开发模块——完成一定的功能

  1. 指定的包下,创建一个Java文件

在这里插入图片描述

  1. 其中写处理逻辑,并向外提供public接口
public class FindLanguage {

    public String findLanguage(String feature) {

        switch(feature) {
            case "fast":
                return "C/C++";
            case "easy":
                return "python";
            case "new":
                return "Kotlin";
            case "OO":
                return "Java";
            default:
                return "Choose Me!";
        }

    }

}

  1. 在控制层进行实例化,为了防止使用未初始化调用,使用final关键字强制初始化

在这里插入图片描述

  • 控制层完整代码
public class MainActivity extends AppCompatActivity {

    private final FindLanguage findLanguage = new FindLanguage();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void onClickButton(View button) {

        Spinner spinner = findViewById(R.id.feature);  // 根据ID获取唯一的组件,并对其操作

        // 获取选中的下拉列表项
        String selectItem = spinner.getSelectedItem().toString();

        String langString = findLanguage.findLanguage(selectItem);

        TextView textView = findViewById(R.id.language);

        textView.setText(langString);  // 将字符串设置到文本框

    }
}

4. 测试结果

在这里插入图片描述

5. 交互的过程

  1. 用户点击按钮,触发对public void onClickButton(View)
    的调用Activity通过**findViewById()**获得Spinner的引用,获得
    下拉列表选中项

在这里插入图片描述

  1. 控制器Activity咨询模型层FindLanguage,Activity实例化FindLanguage对象findLanguage,通过点操作符调用find

在这里插入图片描述

  1. Activity更新TextView内容

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值