Android 控件演示 - ListView

在移动应用开发中, 因为屏幕尺寸的限制和操作模式的特点,导致 ListView 成为一个非常常用的控件,当然它也是一个非常灵活的控件。本文展示 ListView 最基本的用法

放置 ListView 控件到屏幕中

在示例中,我们简单的拖动一个 ListView 并放置到一个空白的 Activity 中,然后做一些简单的约束设置,让它占满整个 Activity 的界面。

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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=".TodoListActivity">

<ListView
android:id="@+id/todoList"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

初始化数据和 Adapter

因为 ListView 非常灵活,可以用来显示不同类型的数据,可以为不同类型的数据定制不同的显示外观,所以需要使用 Adapter 来桥接数据和显示样式。在本示例中,我们简单的显示一个字符串数组,定义如下:

1
private String[] data = { "张三", "李四", "王二麻子" };

然后我们使用一个系统内置的 ArrayAdapter 类型来桥接数据和显示样式,显示样式简单的用系统内置的 simple_list_item_1, 代码如下:

1
2
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
TodoListActivity.this, android.R.layout.simple_list_item_1, data);

ArrayAdapter 的参数中,第一个是当前的 Activity, 第二参数是显示样式,第三个就是我们要显示的数据。

然后获取屏幕上的 ListView, 调用 setAdapter 方法设置刚才初始化的 adapter 实例即可

1
2
ListView listView = (ListView)findViewById(R.id.todoList);
listView.setAdapter(adapter);

响应用户选中事件

为了响应用户单击列表中某一行的事件,需要新建一个 OnItemClickListener 的实例,并赋值给对应的 ListView。如下的代码

1
2
3
4
5
6
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d(TAG, "row " + position + " is selected.");
}
});

完整的类代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class TodoListActivity extends AppCompatActivity {

private String[] data = { "张三", "李四", "王二麻子" };

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

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
TodoListActivity.this, android.R.layout.simple_list_item_1, data);
ListView listView = (ListView)findViewById(R.id.todoList);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d(TAG, "row " + position + " is selected.");
}
});
}
}

使用 ButterKnife

也可以使用 butterknife 来绑定ListView。(如果不熟悉 butterknife 的用法,可以参考 在Android中使用注解绑定控件和事件

对应的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class TodoListActivity extends AppCompatActivity {

private String[] data = { "张三", "李四", "王二麻子" };

@BindView(R.id.todoList) ListView listView;

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

ButterKnife.bind(this);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
TodoListActivity.this, android.R.layout.simple_list_item_1, data);
listView.setAdapter(adapter);
}

@OnItemClick(R.id.todoList) void onItemClick(AdapterView<?> parent, View view, int position, long id) {

Log.d(TAG, "row " + position + " is selected.");
}
}

本文标题:Android 控件演示 - ListView

文章作者:梅老师

发布时间:2019年08月11日 - 16:08

最后更新:2020年09月16日 - 08:09

原始链接:https://www.mls-tech.info/app/android/android-widget-listview/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。