您的位置:首页 > 移动开发 > Android开发

ListView的使用详解

2013-12-20 16:43 309 查看
    刚完成了一个课程设计,手机客户端加服务端,在写android程序的时候,基本上不清楚的都是google的,还有些难题是直接跑国外论坛,一个课程设计下来,收获确实蛮多的,但是过后再去看一些知识点的时候,才发现开发中遇到的一些问题其实都是一些基本的问题,以前也都学到过,但是没用就忘了,很多实现其实有很简单的方法,有最合适的官方包装,但是由于不熟悉,导致代码冗余度太大,主要是浪费了很多时间,出力不讨好啊,所以就打算总结一下,什么时候用的时候,知道是什么知识,该用什么方法去实现。

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息