android学习笔记 Listview adapter

  Listview的作用是显示一个列表,列表的内容item可以自定义,将需要显示的内容填充入adapter,然后通过listview类的
setAdapter(ListAdapter adapter)方法即可完成listview的设置。
下面先看下listview的样子,以下是我做的测试,共有两个item,占两行。



下面来看具体的使用方法

要得到一个listview,很简单,只要在主main.xml文件中,如下写:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<ListView android:layout_height="wrap_content" android:id="@+id/lvt"
		android:layout_width="fill_parent">
	</ListView>
</LinearLayout>

然后,我们在程序中,只要如下:

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		lv = (ListView) findViewById(R.id.lvt);
		lv.setAdapter(new adt(new String[]{"菱纱", "紫英"}));
	}

得到listview,并对它进行adapter的设置即可。

所以现在关键就在于将我们需要显示的数据如何填充入adapter。

可供我们利用的adapter有很多,我现在接触到的有 SimpleAdapter 、 BaseAdapter。

下面先来看SimpleAdapter。

SimpleAdapter,通过构造器来构造即可,看下它的构造方法:

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

context,不解释,使用时一般this就可以了

data,这个地方需要的是你想显示在listview中的数据,它的类型应该是一个图类型的链表,

描述不好相信大家可以看懂吧, 看不明白的同学请看这个例子:

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 

这样,每一个结点最终就会对应一个item。

resource,这个是每一个item的xml布局实现,可以在这个xml中对item进行自定义设计,比如:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" android:layout_height="fill_parent">
	<TextView android:text="TextView" android:id="@+id/tv"
		android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>

我只是放了一个textview,为了简单,我们可以根据自己需要在其中放至我们需要的控件。

最后的两个参数,from和to即是data中每个结点中的属性值到item中每个控件的属性值的对应关系。

下面来举个栗子:

main.xml文件不多说,就不贴出来了。

来看item的布局文件my_listitem.xml:

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout   
        android:layout_width="fill_parent"   
        xmlns:android="http://schemas.android.com/apk/res/android"   
        android:orientation="vertical"  
        android:layout_height="wrap_content"   
        android:id="@+id/MyListItem"   
        android:paddingBottom="3dip"   
        android:paddingLeft="10dip">  
        <TextView   
                android:layout_height="wrap_content"   
                android:layout_width="fill_parent"   
                android:id="@+id/ItemTitle"   
                android:textSize="30dip">  
        </TextView>  
        <TextView   
                android:layout_height="wrap_content"   
                android:layout_width="fill_parent"   
                android:id="@+id/ItemText">  
        </TextView>  
</LinearLayout>  

每个item里定义了两个textview。

然后我们看java文件:

public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
    //绑定XML中的ListView,作为Item的容器  
    ListView list = (ListView) findViewById(R.id.MyListView);  
      
    //生成动态数组,并且转载数据  
    ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();  
    for(int i=0;i<30;i++)  
    {  
        HashMap<String, String> map = new HashMap<String, String>();  
        map.put("ItemTitle", "This is Title.....");  
        map.put("ItemText", "This is text.....");  
        mylist.add(map);  
    }  
    //生成适配器,数组===》ListItem  
    SimpleAdapter mSchedule = new SimpleAdapter(this, //没什么解释  
                                                mylist,//数据来源   
                                                R.layout.my_listitem,//ListItem的XML实现  
                                                  
                                                //动态数组与ListItem对应的子项          
                                                new String[] {"ItemTitle", "ItemText"},   
                                                  
                                                //ListItem的XML文件里面的两个TextView ID  
                                                new int[] {R.id.ItemTitle,R.id.ItemText});  
    //添加并且显示  
    list.setAdapter(mSchedule);  
}  

以上是SimpleAdapter的用法,下面我们来看下BaseAdapter。

BaseAdapter使用时继承使用就可以,关键还是在于填充数据的方法,原理自然是一样的。

在使item应用我们的布局xml的时候使用的是LayoutInflater

还是看栗子:

main.xml文件就不贴了,下面是item的布局文件viewitem.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" android:layout_height="fill_parent">
	<TextView android:text="TextView" android:id="@+id/tv"
		android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>

然后是java:

public class Test extends Activity {

	private ListView lv;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		lv = (ListView) findViewById(R.id.lvt);
		lv.setAdapter(new adt(new String[]{"菱纱", "紫英"}));
	}

	public class adt extends BaseAdapter {

		View[] viewitem;

		public adt(String[] viewtexts) {
			viewitem = new View[viewtexts.length];
			for (int i = 0; i < viewtexts.length; i++) {
				viewitem[i] = makeview(viewtexts[i]);
			}
		}

		private View makeview(String s) {
			
			//得到LayoutInflater对象
			LayoutInflater lin = (LayoutInflater) Test.this
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			
			//使item应用我们定义好的布局文件
			View vt = lin.inflate(R.layout.viewitem, null);   
			
			//对item中我们的元素进行相应的属性设置
			TextView tv = (TextView) vt.findViewById(R.id.tv);
			tv.setText(s);
			return vt;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return viewitem.length;
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return viewitem[position];
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			return viewitem[position];
		}

	}
}










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值