`
810364804
  • 浏览: 783374 次
文章分类
社区版块
存档分类
最新评论

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的布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
     <ImageView
         android:id="@+id/image"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginLeft="5dip"
         android:src="@drawable/ic_launcher"
         android:layout_marginTop="3dip" />

	<TextView
        android:id="@+id/name_course"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dip"
        android:layout_marginTop="5dip"
        android:text="水煮活鱼"
        android:layout_below="@id/image"
        android:textSize="16sp"/>

       <TextView
           android:id="@+id/price"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_alignBottom="@+id/image"
           android:layout_marginLeft="15dp"
           android:layout_toRightOf="@+id/name_course"
           android:text="价格:"
           android:textSize="22sp" />

        <TextView
            android:id="@+id/price_number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/name_course"
            android:layout_centerHorizontal="true"
            android:text="48元"
            android:textSize="22sp"/>

 </RelativeLayout>

最终的运行效果如下:



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics