ListView控件和如何向ListView控件添加数据适配器
来源:互联网 发布:生理学软件 编辑:程序博客网 时间:2024/05/22 20:47
ListView非常常用,它可以实现信息列表化及对列表信息的选择,这是实现往ListView各种适配器添加数据。适配器种类主要有SimpleAdapter,ArrayAdapter<T>,还有一种就是自己自定义的适配器。这里通过一个ListView控件使用各种适配器添加数据。
首先定义一个主布局,在主布局里面添加一个TextView控件和一个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" > <TextView android:id="@+id/tv2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="你选择了:" /> <ListView android:layout_below="@+id/tv2" android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="wrap_content"/></RelativeLayout>
接下来编写ListView控件中每个条目中的布局,也可以在代码中动态添加ListView的条目布局。条目简单的定义一个ImageView控件和一个TextView控件,水平放置。
<?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:orientation="horizontal"> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_weight="1" /> <TextView android:layout_width="wrap_content" android:layout_height="40dp" android:id="@+id/tv" android:layout_weight="1" /></LinearLayout>
最后一步就是在activity中实现ListView控件数据的添加,我将实现三种适配器数据的添加。首先第一种实现SimpleAdapter适配器。
package com.example.listviewtdw;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;public class MainActivity extends Activity {private ListView lv;private TextView tv;private List<HashMap<String,Object>> data;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv = (ListView) this.findViewById(R.id.lv);tv = (TextView) this.findViewById(R.id.tv2);//** 为ListView添加数据适配器 data = new ArrayList<HashMap<String, Object>>(); for(int i=0;i<5;i++){HashMap<String, Object> map = new HashMap<String, Object>();map.put("image", R.drawable.a);map.put("desc", "tdw"+i);data.add(map);}SimpleAdapter sa = new SimpleAdapter(this, data, R.layout.listview_item, new String[]{"image","desc"}, new int[]{R.id.image,R.id.tv});lv.setAdapter(sa);lv.setOnItemClickListener(new OnItemClickListener());}private final class OnItemClickListener implements android.widget.AdapterView.OnItemClickListener{@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {tv.setText("你选择了:"+data.get(position).get("desc"));}}}
SimpleAdapter的构造函数是:
public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
context为上下文文本对象,data为要往ListView添加的数据,它是一个List<Map<String,T>>集合,这里参照上边示例便于理解,
resource为要要添加数据的条目
String[] from为数据的提供者
int[] to为数据提供对应条目所在的数据
lv.setOnItemClickListener(new OnItemClickListener());该行为每个条目添加条目监听。
这是第一种数据适配器。
第二种适配器使用ArrayAdapter,
ArrayAdapter的构造函数是:
context为上下文文本对象;
resource为要添加的条目对象
textViewResourceId为条目中textview控件的id。
objects可以为数据,也可以为集合
但是其默认每个条目中只能有一个textview控件,如果想实现多个控件的对应添加,可以继承ArrayAdapter重写其getView函数
package com.example.adpter;import java.util.List;import com.example.domain.Person;import com.example.listviewtdw.R;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;public class MyArrayAdapter extends ArrayAdapter<Person>{private Context context;private List<Person> persons;private LayoutInflater inflater;private int resource;public MyArrayAdapter(Context context, int resource, List<Person> persons) {super(context, resource, persons);this.context = context;this.persons = persons;this.resource = resource;inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = inflater.inflate(resource, null);ImageView imageView = (ImageView) view.findViewById(R.id.image);imageView.setBackgroundResource(persons.get(position).getId());TextView textView = (TextView) view.findViewById(R.id.tv);textView.setText(persons.get(position).getDesc());return view;}}
这里给出部分代码,因为跟前面都是在一个工程之中。
data = new ArrayList<Person>(); data.add(new Person(R.drawable.a,"android的创造者")); data.add(new Person(R.drawable.b,"java的创造者")); data.add(new Person(R.drawable.c,"关系数据库的创造者")); data.add(new Person(R.drawable.d,"web开发的创造者")); MyArrayAdapter sa = new MyArrayAdapter(this, R.layout.listview_item, data); lv.setAdapter(sa);
这里绑定的是一个集合数据。
第三种适配器为继承BaseAdapter,BaseAdapter中文名为基础适配器,Spinner、ListView、GridView都有自己的适配器,但是BaseAdapter对他们来说是通用的,这里给出一个Demo.
package com.example.adpter;import java.util.HashMap;import java.util.List;import com.example.listviewtdw.R;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class MyAdapte extends BaseAdapter{private Context context;private List<HashMap<String, Object>> data;private LayoutInflater inflater;public MyAdapte(Context context, List<HashMap<String, Object>> data) {this.context = context;this.data = data;inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}@Overridepublic int getCount() {return data.size();}@Overridepublic Object getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = inflater.inflate(R.layout.listview_item, null);ImageView imageView = (ImageView) view.findViewById(R.id.image);TextView textView = (TextView) view.findViewById(R.id.tv);imageView.setImageResource((Integer) data.get(position).get("image"));textView.setText(data.get(position).get("desc").toString());return view;}}其做法跟上边继承ArrayAdapter适配器类似,但是它更具有通用性,我这里就不给出全部代码了,自己可以编写一下。
适配器在项目中用到的频率较高,有必要好好掌握好。
- ListView控件和如何向ListView控件添加数据适配器
- 向 ListView 控件添加搜索功能
- C# 向 ListView 控件添加搜索功能
- 列表控件ListView和适配器Adapter
- c#中listview控件如何添加信息
- winfrom如何在listview中添加控件
- ListView动态添加控件
- ListView动态添加控件
- ListView 和 数据适配器
- Win8 ListView数据控件
- ListView控件绑定数据
- C#编程学习之ListView控件属性详解以及如何向列表插入数据
- 列表(ListView)控件和适配器的用法
- Android UI 设计:ListView控件和ArrayAdapter适配器(二)
- DataList和ListView数据控件的使用
- win32 listview控件添加图标
- 怎么获取ListView和GridView适配器中item上TextView和ListView控件的值
- [VB.NET]请教高手:如何使用listview控件从缓冲区中一次性添加多条数据???
- Axis2: 用Axis2的0配置方式实现第一个WebService(1)
- 鼠标划过的动态效果,JQUERY:display:none
- C++ fill和fill_n函数用法介绍和比较
- 越狱研究点滴---ARC下dealloc过程及.cxx_destruct的探究
- C++游戏之透明贴图(四)
- ListView控件和如何向ListView控件添加数据适配器
- 为什么析构函数常常声明为虚函数
- SQL Server 优化存储过程的七种方法
- 三星NOTE3 N900 刷机
- UVA - 624 - CD (动态规划)
- 循环数组求最大子段和系列-----------方法1
- android系统自带的字体外观
- 顺序统计
- 剖析Activity