ListView的使用详解
2013-12-20 16:43
309 查看
刚完成了一个课程设计,手机客户端加服务端,在写android程序的时候,基本上不清楚的都是google的,还有些难题是直接跑国外论坛,一个课程设计下来,收获确实蛮多的,但是过后再去看一些知识点的时候,才发现开发中遇到的一些问题其实都是一些基本的问题,以前也都学到过,但是没用就忘了,很多实现其实有很简单的方法,有最合适的官方包装,但是由于不熟悉,导致代码冗余度太大,主要是浪费了很多时间,出力不讨好啊,所以就打算总结一下,什么时候用的时候,知道是什么知识,该用什么方法去实现。
listview布局文件中常用的属性
![](https://img-blog.csdn.net/20131220160633984)
ListView的实现可以在xml文件中添加<ListView>组件,也可以直接继承ListView类,要显示内容,在xml布局文件中可以直接android:entries="@array/books"引用一个数组资源显示其内容,当然大部分显示都是用adapter。
在listview中常用的四个adapter类:ArrayAdapter,SImpleAdapter,SImpleCursorAdapter,BaseAdapter,其中前三个都是BaseAdapter的子类,对BaseAdapter做了特定的扩展,用BaseAdapter可以做到自定义的扩展。
String[] strs = {"小红帽", "大灰狼", "新概念"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, strs);ArrayAdapter的第二个参数是一个资源ID,该资源代表一个TextView,这里用的是系统自带的布局,也可以使用自定义的textview的xml。当然也可以指定某一布局中的一个TextView组件,如下代码:
listView.setAdapter(new ArrayAdapter<String>(
MainActivity.this,
R.layout.show,
R.id.textView,
data));
ListView lv = (ListView) findViewById(R.id.listView1);
String[] from = { "Text", "Button" };
int[] to = { R.id.text, R.id.button };
List<Map<String, ?>> list = new ArrayList<Map<String, ?>>();
for (int i = 0; i < 10; i++) {
Map<String, String> m = new HashMap<String, String>();
m.put("Text", "Text" + i);
m.put("Button", "Button" + i);
list.add(m);
}
SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.listitem, from, to);
lv.setAdapter(adapter);SimpleCursorAdapter主要是用于显示cursor里面的内容,小例子如下:
setContentView(R.layout.main);
Cursor cursor = getContentResolver().query(Location.CONTENT_URI, mLocationProjection,
null, null, null);
//from跟to,非常有趣,把什么值显示在什么控件上。,是一个数组,支持多个绑定
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.provice_list_item, cursor,
new String[] {Location.PROVICE, Location.CITY },
new int[] { R.id.princeTextView,android.R.id.text1 });
//给listview设置cursor有很多种方式,这是最简单的方式
setListAdapter(adapter);
BaseAdapter标准模板:
class ListOrdersAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<OrderBean> orderList;
public ListOrdersAdapter(Context context, List<OrderBean> orderList) {
inflater = LayoutInflater.from(context);
this.orderList = orderList;
}
@Override
public int getCount() {
System.out.println("getCount----------"+orderList.size());
return orderList.size();
}
@Override
public Object getItem(int position) {
return orderList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("++++++++++++++++++++"+position);
ViewHolder viewHolder;
if(convertView == null){
convertView = inflater.inflate(R.layout.ordershow, null);
viewHolder = new ViewHolder();
viewHolder.orderId = (TextView)convertView.findViewById(R.id.show_order_id);
viewHolder.orderCus = (TextView)convertView.findViewById(R.id.show_order_cus);
viewHolder.orderDate = (TextView)convertView.findViewById(R.id.show_order_date);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder)convertView.getTag();
}
String strOrderId = orderList.get(position).getOrderNum();
String strOrderCus = orderList.get(position).getOrderCusName();
String strOrderDate = orderList.get(position).getOrderDate();
System.out.println(strOrderId+" "+strOrderCus+" "+strOrderDate);
viewHolder.orderId.setText(strOrderId);
viewHolder.orderCus.setText(strOrderCus);
viewHolder.orderDate.setText(strOrderDate);
return convertView;
}
}
static class ViewHolder {
TextView orderId;
TextView orderCus;
TextView orderDate;
}
下一篇文章将详细解释,在BaseAdapter中为什么要用ViewHolder
listview布局文件中常用的属性
ListView的实现可以在xml文件中添加<ListView>组件,也可以直接继承ListView类,要显示内容,在xml布局文件中可以直接android:entries="@array/books"引用一个数组资源显示其内容,当然大部分显示都是用adapter。
在listview中常用的四个adapter类:ArrayAdapter,SImpleAdapter,SImpleCursorAdapter,BaseAdapter,其中前三个都是BaseAdapter的子类,对BaseAdapter做了特定的扩展,用BaseAdapter可以做到自定义的扩展。
String[] strs = {"小红帽", "大灰狼", "新概念"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, strs);ArrayAdapter的第二个参数是一个资源ID,该资源代表一个TextView,这里用的是系统自带的布局,也可以使用自定义的textview的xml。当然也可以指定某一布局中的一个TextView组件,如下代码:
listView.setAdapter(new ArrayAdapter<String>(
MainActivity.this,
R.layout.show,
R.id.textView,
data));
public SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)SimpleAdapter的构造方法只此一个,小例子如下:
ListView lv = (ListView) findViewById(R.id.listView1);
String[] from = { "Text", "Button" };
int[] to = { R.id.text, R.id.button };
List<Map<String, ?>> list = new ArrayList<Map<String, ?>>();
for (int i = 0; i < 10; i++) {
Map<String, String> m = new HashMap<String, String>();
m.put("Text", "Text" + i);
m.put("Button", "Button" + i);
list.add(m);
}
SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.listitem, from, to);
lv.setAdapter(adapter);SimpleCursorAdapter主要是用于显示cursor里面的内容,小例子如下:
setContentView(R.layout.main);
Cursor cursor = getContentResolver().query(Location.CONTENT_URI, mLocationProjection,
null, null, null);
//from跟to,非常有趣,把什么值显示在什么控件上。,是一个数组,支持多个绑定
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.provice_list_item, cursor,
new String[] {Location.PROVICE, Location.CITY },
new int[] { R.id.princeTextView,android.R.id.text1 });
//给listview设置cursor有很多种方式,这是最简单的方式
setListAdapter(adapter);
BaseAdapter标准模板:
class ListOrdersAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<OrderBean> orderList;
public ListOrdersAdapter(Context context, List<OrderBean> orderList) {
inflater = LayoutInflater.from(context);
this.orderList = orderList;
}
@Override
public int getCount() {
System.out.println("getCount----------"+orderList.size());
return orderList.size();
}
@Override
public Object getItem(int position) {
return orderList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("++++++++++++++++++++"+position);
ViewHolder viewHolder;
if(convertView == null){
convertView = inflater.inflate(R.layout.ordershow, null);
viewHolder = new ViewHolder();
viewHolder.orderId = (TextView)convertView.findViewById(R.id.show_order_id);
viewHolder.orderCus = (TextView)convertView.findViewById(R.id.show_order_cus);
viewHolder.orderDate = (TextView)convertView.findViewById(R.id.show_order_date);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder)convertView.getTag();
}
String strOrderId = orderList.get(position).getOrderNum();
String strOrderCus = orderList.get(position).getOrderCusName();
String strOrderDate = orderList.get(position).getOrderDate();
System.out.println(strOrderId+" "+strOrderCus+" "+strOrderDate);
viewHolder.orderId.setText(strOrderId);
viewHolder.orderCus.setText(strOrderCus);
viewHolder.orderDate.setText(strOrderDate);
return convertView;
}
}
static class ViewHolder {
TextView orderId;
TextView orderCus;
TextView orderDate;
}
下一篇文章将详细解释,在BaseAdapter中为什么要用ViewHolder
相关文章推荐
- Android进阶之路 - ListView的使用详解
- ListView嵌套GridView使用详解
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解 Hongyang 转载
- ListView 使用方法详解
- 【VB技巧】VB ListView 控件功能使用详解
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- 【VB技巧】VB ListView 控件功能使用详解
- android:ExpandableListView(可扩展的ListView)使用详解;
- 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析
- ListView使用详解
- ListView使用详解
- Android ListView使用详解
- android ListView使用详解
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android使用SwipeMenuListView 高仿QQ、微信侧滑删除--详解
- ExpandableListView使用详解
- (转)Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android ListView之EfficientAdapte的使用详解
- OPhone中的ListView使用详解
- 宏锦软件 Android 的 ListView 使用详解