在移动应用开发中, 因为屏幕尺寸的限制和操作模式的特点,导致 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."); } }
|