索引:当前可见条目的下标
位置:光标上条目的下标
定义一个垂直滚动的视图集合,列表中的每个视图紧挨着前一个视图。为了更加流行和高效的展示一个列表,使用RecyclerView。
要展示一个列表,可以在布局配置文件引入一个列表view:
<ListView
* android:id="@+id/list_view"
* android:layout_width="match_parent"
* android:layout_height="match_parent" />
列表视图是一个AdapterView,不知道细节,如它包含的类型和内容。相反,列表视图从ListAdapter中按需索取,例如用户上下滚动时展示新的视图。
为了展示列表中的条目,调用set(ListAdapter adapter)绑定一个adapter和list。
要展示为了数据集中每个条目更加个性化的视图,实现一个ListAdapter。例如,继承BaseAdapter,然后在getView方法创建和配置每条数据的视图。
private class MyAdapter extends BaseAdapter {
// override other abstract methods here
@Override
public View getView(int position, View convertView, ViewGroup container) {
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.list_item, container, false);
}
((TextView) convertView.findViewById(android.R.id.text1))
.setText(getItem(position));
return convertView;
}
}
ListView会尝试重用视图对象,以提高性能,并且避免对用户的滚动响应滞后。为了利用这个特性,先检查getView提供的convertView是否为空,在创建和加载一个新的view对象。ListView的平滑滚动可以保证平滑的用户体验。
提高滚动平滑的更多方式:raining/improving-layouts/smooth-scrolling.html
自定义adapter的完整例子:samples/CustomChoiceList/index.html
为用户点击条目添加动作:guide/topics/ui/declaring-layout.html#HandlingUserSelections
学习使用CursorAdapter填充ListView:guide/topics/ui/declaring-layout.html#FillingTheLayout
学习使用cursor怎么避免阻塞主线程:guide/topics/ui/layout/listview.htm
注意,很多例子使用ListActivity和ListFragment展示列表,更随意的好办法是写一个更加通用的Activity和Fragment,把ListView直接加到View树中,这种方法对ListView和Adapter的控制更加。