在开发的过程中,经常会用到列表,google已经为我们提供了列表的控件:listview。今天介绍的是最简单的listview。
使用listview首先需要在布局文件中添加一个listview控件,类似下面这样:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ListView
android:id="@+id/lv"
android:layout_height="match_parent"
android:layout_width="match_parent"></ListView>
</RelativeLayout>
然后就是在我们的Activity中获取到该listview,并将数据关联到这个listview,这里简单的介绍三种关联的方式:
1 使用自定义的Adapter
首先我们需要自己编写一个java类继承BaseAdapter,并实现里面的方法。然后我们调用listview的setAdapter方法,并创建一个我们自定义的Adapter的实例,作为参数传入。
下面是自定义的Adapter类:
private class myAdapter extends BaseAdapter{
@Override
public int getCount() {
//返回listview的item的总数
return 50;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
// 手工穿件listview的item
// @Override
// public View getView(int position, View convertView, ViewGroup parent) {
// Log.i("mxy", "位置" + position);
// TextView tv = new TextView(getApplicationContext());
// tv.setText("位置" + position);
// tv.setTextColor(Color.RED);
// return tv;
// }
//通过布局创建listview的item
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.i("mxy", "位置" + position);
View view = View.inflate(getApplicationContext(), R.layout.list_item, null);
TextView mTextViewPosition = (TextView) view.findViewById(R.id.tv_position);
TextView mTextViewName= (TextView) view.findViewById(R.id.tv_name);
mTextViewPosition.setText("位置 " + position);
mTextViewName.setText("姓名 " + position);
return view;
}
}
其中比较重要的是getView,这个方法返回的View就是我们在手机上显示的listview里面的item的View,上面的例子中写了两种创建item的方法都是可以的。
下面是listview的adapter的代码:
lv = (ListView) findViewById(R.id.lv);
//自定义的Adapter
lv.setAdapter(new myAdapter());
2 使用ArrayAdapter
代码如下:
for(int i = 0 ; i < 50 ; i ++){
ary[i] = "功能" + i;
}
lv.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.tv_position, ary));
这种方式适合比较简单的listview,每行只需要填一个数据,ArrayAdapter的参数分别是:Context、item的布局文件、需要赋值的item中控件的id、数组。对于复杂一点的我们可以使用第3种方式。
3 使用SimpleAdapter
例子代码如下:
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
for(int i = 0 ; i < 50 ; i ++){
Map<String,Object> map = new HashMap<String,Object>();
map.put("position", "位置" + i);
map.put("name", "姓名 " + i);
data.add(map);
}
lv.setAdapter(new SimpleAdapter(this, data, R.layout.list_item, new String[]{"position","name"}, new int[]{R.id.tv_position,R.id.tv_name}));
这里面的参数就比上面使用ArrayAdapter复杂多了,可以同时向布局文件中得多个控件赋值。
对于listview我们在使用的过程中,并不会立即创建所有的item,只有我们滑动到item在屏幕上显示的时候才会显示,这样应该会加快运行的效率吧。
例子工程下载地址:http://download.csdn.net/detail/mengxiangyue/7036433
转载请注明出处:http://blog.csdn.net/mengxiangyu