BaseAdapter的使用

来源:互联网 发布:火车票选座位软件 编辑:程序博客网 时间:2024/05/21 11:32

总觉得在这几个adapter里面,BaseAdapter是最重要的,因为他可以适应所有的模式

1.写一个类继承BaseAdapter

重写里面的方法,其中 getCount() 和getView(int arg0, View arg1, ViewGroup arg2)必须重写:

public int getCount() {return 0;//必须重写,不能返回0.否则没有数据}public Object getItem(int arg0) {return null;}public long getItemId(int arg0) {return 0;}public View getView(int arg0, View arg1, ViewGroup arg2) {return null;}


2.声明视图容器

LayoutInflater  inflater=null

视图容器是在构造方法里通过inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);创建的。

在getview里通过convertView=inflater.inflate(R.layout.girdviewnull);获取list_item布局文件的视图 。

这里有两个视图,一个是包含listview控件的主视图,另一个是list_item显示的方式。

下面是例子:

package com.example.list; import java.util.ArrayList;import java.util.HashMap; import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView; public class ListViewActivity extends Activity {//声明ListViewListView listView;//声明 MyAdapter MyAdapter adapter;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); //显示主视图setContentView(R.layout.listviewlayout);//初始化listViewlistview=(ListView)findViewById(R.id.cities_listView);//获取数据ArrayList<HashMap<String,Object>> list=getData();//初始化adapter(调用的构造方法)adapter=new MyAdapter(list);//将适配器设置到listviewlistview.setAdapter(adapter);}//获取数据的方法private ArrayList<HashMap<String, Object>> getData() {ArrayList<HashMap<String, Object>> list=new ArrayList<HashMap<String,Object>>();for(int i=0;i<10;i++){HashMap<String, Object> map=new HashMap<String, Object>();map.put("personImage", R.drawable.ic_launcher);map.put("personName", "刘关星");map.put("personCode", "123");list.add(map);}return list;} //建立一个新类继承BaseAdapterclass MyAdapter extends BaseAdapter{private ArrayList<HashMap<String,Object>> list;//视图容器private LayoutInflater inflater;//构造方法public MyAdapter(ArrayList<HashMap<String,Object>> list){this.list=list;//得到inflater第一种方法this.inflater=getLayoutInflater();//得到inflater第二种方法inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}//必须重写,默认返回的是0@Overridepublic int getCount() {return list.size();} @Overridepublic Object getItem(int position) {return list.get(position);} @Overridepublic long getItemId(int position) {return position;} @Overridepublic View getView(int position, View convertView, ViewGroup parent) {HashMap<String, Object> person_map=list.get(position);ViewHolder holder=null;if(convertView==null){//这里将list_item的视图通过inflater得到并给了converviewconvertView=inflater.inflate(R.layout.list_item,null);holder=new ViewHolder();//找到idholder.image=(ImageView) convertView.findViewById(R.id.person_image);holder.name_text=(TextView) convertView.findViewById(R.id.person_name);holder.code_text=(TextView) convertView.findViewById(R.id.person_code);holder.persondelete_btn=(Button) convertView.findViewById(R.id.pesondelete_btn);convertView.setTag(holder);}else{//直接得到下一个控件集holder=(ViewHolder) convertView.getTag();}//赋值holder.image.setImageResource((Integer)person_map.get("personImage"));holder.name_text.setText((String)person_map.get("personName"));holder.code_text.setText((String)person_map.get("personCode"));holder.persondelete_btn.setOnClickListener(new OnClickListener() {public void onClick(View arg0) {System.out.println("++");}});return convertView;}}//自定义的ViewHolderstatic class ViewHolder{ImageView image;TextView name_text;TextView code_text;Button persondelete_btn;}}


 

 


0 0
原创粉丝点击