通常我们更多的继承BaseAdapter来编写自己的Adapter类,因为BaseAdapter类是其他Adapter类的基类。在世界的运用过程中呢,我们一般需要重写这类的一些方法:
getCount() ;获取当前Adapter的Items数目
getItem(int position);获取相应Position(位置)的Item
getItemId(int position);获取相应position的Item在LIst中的row id
getView(int positon,View convertView,ViewGroup parent);获取在指定position所要显示的data的view
getView()方法很重要,主要是将获取数据后的View组件返回,比如,可以再此方法中读取到所定义的GridView中的每一行里ImageView传递过来的属性及数据。
下面有一个例子:
xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.gsllery.MainActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<Gallery
android:id="@+id/gallery1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:spacing="5px" />
<ImageView android:id="@+id/imageView1"
android:layout_gravity="center_vertical"
android:layout_marginTop="20px"
android:layout_width="320px"
android:layout_height="320px"
/>
</LinearLayout>
主程序文件:
package com.example.gsllery;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
//Adapter的使用方法
public class MainActivity extends ActionBarActivity {
// 定义Gallery和ImageView的组件
private Gallery gallery;
private ImageView imgview;
// 定义数据源
private int[] imgs={
R.drawable.f1,
R.drawable.f2,
R.drawable.f3,
R.drawable.f4,
R.drawable.f5,
R.drawable.f6,
R.drawable.f7,
R.drawable.f8,
R.drawable.f9,
};
// 当Activity首次响应时调用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置一个Activity的显示界面,显示界面在res文件夹下的layout 中
setContentView(R.layout.activity_main);
imgview=(ImageView)findViewById(R.id.imageView1);
gallery=(Gallery)findViewById(R.id.gallery1);
MyImgAdapter adapter=new MyImgAdapter(this);
gallery.setAdapter(adapter);
// 点击图片时,将该图片的ID传给下面的ImageView中
gallery.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?>arg0,View view,int position,long arg3){
imgview.setImageResource(imgs[position]);
}
});
}
// 自定义图片Adapter以内部类形式存在于mainActivity中
// 方便访问MainActivity中的各个变量,特别是imgs数组
class MyImgAdapter extends BaseAdapter{
// 定义Context上下文,在本例中是只主程序
private Context context;
public MyImgAdapter(Context context){
super();
this.context=context;
}
// 获得图片的数量
public int getCount(){
return imgs.length;
}
// 获得图片在库中的位置
public Object getItem(int position){
return position;
}
// 获得图片ID
public long getItemId(int position){
return position;
}
// 当列表里的每一项显示到页面时
// 都会调用Adapter的getView方法返回一个View
public View getView(int position ,View convertView,ViewGroup parent){
// 针对每一个数据(即每一个图片id)创建一个ImageView实例
ImageView imageView=new ImageView(context);
// 设置图片数据源
imageView.setImageResource(imgs[position]);
// 写日志
Log.i("magc", String.valueOf(imgs[position]));
// 设置Gallery中每一个图片的大小80*80
imageView.setLayoutParams(new Gallery.LayoutParams(80,80));
// 设置显示比例类型
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
return imageView;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}