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当然返回的是一个布局了
剩下的事情就简单了,也就是在我们的avtivity文件里面配置一下就好,这里我简单写两句。convertView = LayoutInflater.from(context).inflate(R.layout.listview, null); 这句话的意思就是把我们找到的listview,xml文件布局给我们listview里面的每个item,即每一条,然后通过控制converView来实现我们要展现的形式。这里的判空是用来实现converView的复用性,这个如果不明白可以查阅更多资料去加以理解。
listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(new MyAdapter(list, Test2Activity.this));
这两句的意思分别是找出我们想要的控件,并把我们的布局与数据放进去。这个list数据大家可以自己设置,我把我的数据展示如下
请记住,数据放在适配器之前呢是可以直接调用进去的,如果之后呢需要调用这样一个方法来通知适配器更新数据,adapter.notifyDataSetChanged()这里有不懂的就自己琢磨吧。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); }
这里简单献上我的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>>();截图如下