Android之自定义Adapter

在ListView中经常用到适配器Adapter, android提供的三种Adapter主要有ArrayAdapter,SimpleAdapter,SimpleCursorAdapter,ArraAdapter是简单的字符串适配器,在实际项目中很少会用到(功能太有限),SimpleAdapter可以自定义ListView的每个Item的布局,一般在简单的布局中会考虑使用,而SimpleCursorAdapter主要用于数据库,前两个的数据来源一般都是String[]或者List,后一个的数据来源一般是数据库查询得到的Cursor。

在实际的项目中,尤其listView的每个Item的布局比较复杂的时候,我们一般都要自定义自己的Adapter,要实现自己的Adapter,我们需要继承BaseAdapter类,同时要覆写其中的四个方法:

public int getCount() :该方法返回ListView中要显示的子View的数量;

public Object getItem(int position):该方法返回一个子View,即listView中的一个子条目,也可以返回自己想要的信息。

public long getItemId(int position):该方法根据Item在listview中的位置,返回其id;

public View getView(int position, View convertView, ViewGroup parent) :该方法是最重要的,也是最难理解的了,它返回的是id为position的Item布局文件对应的View,该View中的各组件可以在getView方法中配置其显示。


这里还有一个点需要说明,就是LayoutInflater类,它的inflate()方法可以根据布局文件获得其View返回值,接下来我们就可以取得该View中的各个组件,便可以为其设置资源,从而配置其显示。

一个简单的自定义实现Adapter的代码类如下:

package com.example.activity;


import com.example.activity.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MenuActivity extends Activity {
    
	private ListView list = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_menu);
		list = (ListView)findViewById(R.id.list);
		
		MyAdapter mAdapter = new MyAdapter();
		list.setAdapter(mAdapter);
	}
	
	//自定义Adapter
	class MyAdapter extends BaseAdapter{
		
		int[] images = new int[]{
				R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
				R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
				R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
				R.drawable.ic_launcher
		};
		String[] names = new String[]{
				"干锅兔肉","水煮牛肉","剁椒鱼头","腊牛肉","藏香鸡",
				"蒜茸蒸茄子","小炒肚丝","鳝鱼煨黄瓜","养生健康汤","鲜鱼汤"
		};
		String[] prices = new String[]{
				"28","32","28","32","32",
				"28","28","26","20","30"				
		};

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

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

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

		//该方法返回整个Item的布局View
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			if(convertView == null){
				//根据布局文件获取其view返回值
				convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.layout_adapter, null);
			}
			//获取listview中每个Item布局文件中的的子组件的ID
			ImageView image = (ImageView)convertView.findViewById(R.id.image);
			TextView name = (TextView)convertView.findViewById(R.id.name_course);
			TextView price_number = (TextView)convertView.findViewById(R.id.price_number);		
			
			//为对应的Item中的各个组件设置资源,从而配置其显示
			image.setImageResource(images[position]);
			name.setText(names[position]);
			price_number.setText(prices[position]);
			
			return convertView;
		}
		
	}
	
}

每个Item的布局文件如下:



    
     

	

       

        

 

最终的运行效果如下:

Android之自定义Adapter_第1张图片


你可能感兴趣的:(Android之自定义Adapter)