论坛首页 移动开发技术论坛

ListView[详解]

浏览 2653 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-06-16  

列表的显示需要三个元素:
1.ListVeiw 用来展示列表的View。
2.适配器 用来把数据映射到ListView上的中介。
3.数据 具体的将被映射的字符串,图片,或者基本组件。
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,这三种适配器使用起来都比较简单,这里就不做详细的介绍,主要介绍一下这三种适配器的适配

(1)ArrayAdapter(Context context, int textViewResourceId, List<T> objects)来装配数据

(2)SimpleCursorAdapter 构造函数前面3个参数和ArrayAdapter是一样的,最后两个参数:一个包含数据库的列的String型数组,一个包含布局文件中对应组件id的int型数组

(3)SimpleAdapter(Context context,List<Map<String,Object> mData,int textViewResourceId, new String[]{}, new int[]{});

下面重点介绍自定义Adapter来适配ListView

 

package com.cn.listview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.*;

public class ListView04 extends ListActivity {
	private List<Map<String,Object>> mData;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mData=getData();
        MyAdapter mAdapter=new MyAdapter(this);
        setListAdapter(mAdapter);
    }
    
    
	private List<Map<String,Object>> getData(){
    	List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
    	Map<String,Object> map=new HashMap<String,Object>();
    	map.put("title", "title01");
    	map.put("info", "info01");
    	map.put("img", R.drawable.icon);
    	list.add(map);
    	map=new HashMap<String,Object>();
    	map.put("title", "title02");
    	map.put("info", "info02");
    	map.put("img", R.drawable.icon);
    	list.add(map);
    	return list;
    }
    
    public void showInfo(){
    	new AlertDialog.Builder(this)
    	.setTitle("myListView")
    	.setMessage("instruction")
    	.setPositiveButton("OK", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface arg0, int arg1) {
				
			}
		}).show();
    }
    
    public final class ViewHolder{
    	public ImageView img;
    	public TextView title;
    	public TextView info;
    	public Button viewBtn;
    }
    
    public class MyAdapter extends BaseAdapter{
    	private LayoutInflater mflater;
    	public MyAdapter(Context mContext){
    		this.mflater=LayoutInflater.from(mContext);
    	}
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return mData.size();
		}

		@Override
		public Object getItem(int arg0) {
			return null;
		}

		@Override
		public long getItemId(int arg0) {
			return 0;
		}

		@Override
		public View getView(int arg0, View arg1, ViewGroup arg2) {
			ViewHolder holder=null;
			if (arg1==null) {
				holder=new ViewHolder();
				arg1=mflater.inflate(R.layout.main, null);
				holder.img=(ImageView)arg1.findViewById(R.id.img);
				holder.title=(TextView)arg1.findViewById(R.id.title);
				holder.info=(TextView)arg1.findViewById(R.id.info);
				holder.viewBtn=(Button)arg1.findViewById(R.id.btn);
				arg1.setTag(holder);
			}else{
				holder=(ViewHolder)arg1.getTag();
			}
			holder.img.setBackgroundResource((Integer)mData.get(arg0).get("img"));
			holder.title.setText((String)mData.get(arg0).get("title"));
			holder.info.setText((String)mData.get(arg0).get("info"));
			holder.viewBtn.setOnClickListener(new btn_click());
			return arg1;
		}
		
		class btn_click implements OnClickListener{

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				showInfo();
			}
			
		}
    	
    }
}

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<ImageView android:id="@+id/img" android:layout_width="45px"
		android:layout_height="45px" />
	<TableLayout android:layout_width="fill_parent"
		android:layout_height="fill_parent" android:stretchColumns="0">
		<TableRow>
			<LinearLayout android:orientation="vertical"
				android:layout_width="fill_parent" android:layout_height="fill_parent"
				android:gravity="left">
				<TextView android:textSize="16px" android:textColor="#ffffff"
					android:layout_width="wrap_content" android:layout_height="wrap_content"
					android:id="@+id/title" />
				<TextView android:textSize="13px" android:textColor="#ffffff"
					android:layout_width="wrap_content" android:layout_height="wrap_content"
					android:id="@+id/info" />
			</LinearLayout>

			<Button android:id="@+id/btn" android:text="@string/viewBtn"
				android:layout_width="65px" android:layout_height="wrap_content" />
		</TableRow>
	</TableLayout>
</LinearLayout>
 
  • 大小: 15 KB
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics