listview的控件很好使用,但要在上面按照我们希望的格式放上数据,这就需要baseadapter的帮助了。这里简单列出一个
public class MyAdapter extends BaseAdapter{
private List<Map<String, String>> list;
private Context context;
public MyAdapter(List<Map<String, String>> list,Context context){
this.list=list;
this.context = context;
}
public int getCount() {
return list.size();
}
public Object getItem(int position) {
return list.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.listview, null);
}
TextView title = (TextView) convertView.findViewById(R.id.title);
title.setText(list.get(position).get("title"));
return convertView;
}
}
getCount()返回的是listview的长度,也就是含有多少条数据吧
getItemId也就是返回当前的条目,即第几条
getView当然返回的是一个布局了
convertView = LayoutInflater.from(context).inflate(R.layout.listview, null); 这句话的意思就是把我们找到的listview,xml文件布局给我们listview里面的每个item,即每一条,然后通过控制converView来实现我们要展现的形式。这里的判空是用来实现converView的复用性,这个如果不明白可以查阅更多资料去加以理解。
剩下的事情就简单了,也就是在我们的avtivity文件里面配置一下就好,这里我简单写两句。
listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(new MyAdapter(list, Test2Activity.this));
这两句的意思分别是找出我们想要的控件,并把我们的布局与数据放进去。这个list数据大家可以自己设置,我把我的数据展示如下
private void init() {
list = new ArrayList<Map<String,String>>();
map = new HashMap<String, String>();
map.put("title", "我的资料");
list.add(map);
map = new HashMap<String, String>();
map.put("title", "好友管理");
list.add(map);
map = new HashMap<String, String>();
map.put("title", "偏好设置");
list.add(map);
map = new HashMap<String, String>();
map.put("title", "注册新账户");
list.add(map);
map = new HashMap<String, String>();
map.put("title", "找回密码");
list.add(map);
map = new HashMap<String, String>();
map.put("title", "关于我们");
list.add(map);
map = new HashMap<String, String>();
map.put("title", "...");
list.add(map);
}
请记住,数据放在适配器之前呢是可以直接调用进去的,如果之后呢需要调用这样一个方法来通知适配器更新数据,adapter.notifyDataSetChanged()这里有不懂的就自己琢磨吧。
这里简单献上我的listview的item的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1" />
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="aa" />
</LinearLayout>
</LinearLayout>
截图展示我所实现的效果
关于listview的更多内容,我会在以后的介绍中陆续加上,敬请期待。。。
这里再补充一个更简单的适配器,能适配很多内容,只要不是很复杂的都可以实现,代码如下:
//参数分别代表 上下文 存放数据的集合 布局文件 集合里面的字段 item布局里面对应的字段
SimpleAdapter mss=new SimpleAdapter(ChengActivity.this, list,R.layout.listview, new String[]{"iocn","text"},new int[]{R.id.imageView,R.id.textView});
顺便附带我定义的集合List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
截图如下