1. MVC介绍
-
M: Model 模块层,可以是一个Java类或者一个函数
-
V:View 视图层,在Android中即为Activity的布局xml文件
-
C: Control 控制层,为Android中的Activity
2. 功能分析
- 建立一个下拉列表框,并指定其中的字符数组资源
- 建立一个按钮,其中按钮的文字为指定的字符资源
- 建立一个文本框,显示获取下拉列表字符后变换后的字符串
3. 实现
3.1 开发视图层
- 在constraint布局中拖入Linear(Vertical)布局,并以此拖入其他组件
- 修改其中的ID
格式为 @+id/feature
- 建立字符串资源
<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>
- 下拉列表需要指定entry属性
- 其他组件指定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 开发控制层(添加按钮响应事件)
- 指定button的onClick属性
2. 在Activity中添加public函数与onClick指定的名字一致
3.3 开发模块——完成一定的功能
- 指定的包下,创建一个Java文件
- 其中写处理逻辑,并向外提供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!";
}
}
}
- 在控制层进行实例化,为了防止使用未初始化调用,使用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. 交互的过程
- 用户点击按钮,触发对public void onClickButton(View)
的调用Activity通过**findViewById()**获得Spinner的引用,获得
下拉列表选中项
- 控制器Activity咨询模型层FindLanguage,Activity实例化FindLanguage对象findLanguage,通过点操作符调用find
- Activity更新TextView内容