/* Android开发入门经典实例 */ My notes
https://www.tianmaying.com/tutorial/a-simple-sample-for-android-development/repo
/* 安卓开发入门 */
涉及到了Android开发中的一些关键知识,比如:
- 配置开发环境
- App中一个屏幕的抽象: Activity
- 屏幕之间的跳转: Intent
- 构成屏幕展示的视图组件:显示图片的 ImageView ,显示文字的 TextView ,把组件组成一个列表的 视图 ListView
- 通过 Adapter 来控制模型和视图组件之间通信,即如何在视图上展示特定的数据 通过事件来处理用户的交互: OnClickListener
MainActivity 的代码骨架,这个Activity就代表App启动的 时候,我们看到的那个屏幕。这个Java文件定义了一个 Activity ,当应用运行时, MainActivity 类启 动一个 Acitivty
并加载 activity_main.xml 布局文件,将其显示在屏幕上。
Acitvity 和 layout 的 关联是在 MainActivity 中 onCreate() 方法里完成的:setContentView(R.layout.activity_main);
- app/src/main/AndroidManifest.xml
Android Manifest文件是描 述Android应用的基本信息,并定义了应用中的各个组件(Activity是一种组件)。
- app/src/main/res 目录下包含了应用所需要的资源文件:
drawable
menu/ - 应用的菜单布局
values/ 常量值例如字符串、颜色数值等
展示列表
$$ activity_main.xml 布局文件
android:id="@+id/teacher_listView" 定义了这个 ListView 的ID为 teacher_listView .
android:id="@+id/teacher_listView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> 用来将数据传递给 ListView 的适配器是 ArrayAdapter 。这里我们传入的是一个字符串的数组,因此我 们创建一个 ArrayAdapter 注意初始化Adapter的代码: ArrayAdapter this, 当前的Activity android.R.layout.simple_list_item_1, 列表元素 (即列表中的每一行)布局 Teacher.getAllTeachers() 所有数据构成的List,即数据源 public Teacher(String name, int imageId, String desc) { this.name = name; } public static List List } res/layout *创建自定义的ArrayAdapter 我们创建一个自定义的ArrayAdapter。我们创建一个命名为 TeacherAdapter 的类, 让其继 承 ArrayAdapter public class TeacherAdapter extends ArrayAdapter *getView() 方法的重载实现 listView.setAdapter 在 MainActivity.java 中的代码也需要做相应的修改,此时我们要创建一个 TeacherAdapter 的对象, 并将其设置为 listView 的Adapter。 理解: ArrayAdapter - 大框架 - 按行排列 TeacherAdapter - 每一行 的内容 - ImageView,ImageView 我们已经了解如何创建Activity中的视图,如何通过Adapter给视图传递数据。 teacher_item.xml 布局的编辑,我们往预览区中拖入一个 ImageView 和 TextView TeacherAdapter 的 getView() 方法,在最后一条 return 语句前加入: 在返回 oneTeacherView 之前,设置一个 OnClick 点击事件的监听器,当事件发生的时 候,就会执行 public void onClick(View v) 内部的代码。 oneTeacherView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 这里进行跳转 } }); oneTeacherView是一个布局(layout) public void onClick(View v) { // 准备跳转 } Intent 的 putExtra 方法就是用来传递参数的,我们只需在初始化 Intent 对象之后把老师的数据传递 进去即可。 需要注意的一点是,为了访问 teacher 变量,需要在申明的时候加上 final 修饰符。 (final关键字可以用来修饰类、变量、方法。final变量不能重新赋值,子类不能覆盖父类的final方法,final类不能有子类。) public class TeacherAdapter public void onClick(View v) { // TeacherDetailActivity Intent // Intent Teacher TeacherDetailActivity intent.putExtra("teacher_image", teacher.getImageId()); intent.putExtra("teacher_desc", teacher.getDesc()); // TeacherDetailActivity Intent getContext().startActivity(intent); } public class TeacherDetailActivity - onCreate() method @Override super.onCreate(savedInstanceState); setContentView(R.layout.activity_teacher_detail); // 从Intent 获取数据 // 获取特定的视图 // 根据数据设置视图展现 imageView.setImageResource(imageId); textView.setText(desc); }设置Adapter
这部分代码添加到 MainActivity.java 的 onCreate 方法中:优化模型 - 给 Teacher 类增加一些属性
改进列表 - 新的布局 - 加入图片 xml
创建第二个Activity
Activity的跳转:Intent
// 初始化一个准备跳转到TeacherDetailActivity Intent
Intent intent = new Intent(getContext(), TeacherDetailActivity.class);
getContext().startActivity(intent);通过Intent传递参数
设置Intent的Extra数据
Intent intent = new Intent(getContext(), TeacherDetailActivity.class);根据Intent数据展示内容
protected void onCreate(Bundle savedInstanceState) {
int imageId = getIntent().getIntExtra("teacher_image", 0); String desc = getIntent().getStringExtra("teacher_desc");
ImageView imageView = (ImageView) findViewById(R.id.teacher_large_imageView); TextView textView = (TextView) findViewById(R.id.teacher_desc_textView);