自定义的Adapter的简单设计和使用
Adapter一共有四种,分别是ArrayAdapter,SimpleAdapter,SimpleCursorAdapter,自定义的Adapter。自我感觉这里最复杂的就是自定义的Adapter同时也是使用最多的。废话少说,直接上代码。
首先在res->layout->activity_main_xml文件中建立一个ListView控件,直接拖进去就行了。然后在layout里面再建立一个xml文件,例如取名为cell,然后在里面建立一个TextView。由于我们要自己创建一个Adapter,所以在src中创建一个包,然后在该包中创建一个类,在该类中我们写自定义的Adapter。下面就是具体代码:
package myadapter;
import com.anjoyo.myadapter.R;
import android.R.layout;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
//继承BaseAdapter类
public class MyAdapter extends BaseAdapter {
//承接上下文
private Context context;
//定义数据
private String[] data;
//构造方法
public MyAdapter(Context context, String[] data,int[] iamge) {
this.context = context;
this.data = data;
this.p_w_picpath = iamge;
}
//重写4个方法
//返回当前数据源的数据量
@Override
public int getCount() {
return data.length;
}
//返回当前的一项
@Override
public Object getItem(int arg0) {
return data[arg0];
}
//返回当前每一项的ID
@Override
public long getItemId(int arg0) {
return arg0;
}
//返回一个视图
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
//加载视图
// LayoutInflater inflater = (LayoutInflater) context
// .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.cell,
// null);
// tv = (TextView) layout.findViewById(R.id.textView1);
// tv.setText(data[arg0]);
ViewHolder holder;
if (arg1==null) {
arg1 = LayoutInflater.from(context).inflate(R.layout.cell, null);
holder = new ViewHolder();
// tv = (TextView) arg1.findViewById(R.id.textView1);
holder.tv = (TextView) arg1.findViewById(R.id.textView1);
holder.iv = (ImageView) arg1.findViewById(R.id.p_w_picpathView1);
// tv.setText(data[arg0]);
// tv.setText(data[arg0]);
arg1.setTag(holder);
} else{
// tv = (TextView) arg1.findViewById(R.id.textView1);
// tv.setText(data[arg0]);
holder = (ViewHolder) arg1.getTag();
}
holder.tv.setText(data[arg0]);
holder.iv.setBackgroundResource(p_w_picpath[arg0]);
return arg1;
}
//使用ListView的缓存处理
private static class ViewHolder{
TextView tv;
}
代码中注释的代码是是没使用缓存处理时的代码,使用缓存处理的好处就是可以优化系统,避免资源的浪费。需要注意的是import
com.anjoyo.myadapter.R;
接着我们需要在MainActivity中引用这个Adapter,看具体代码:
package com.anjoyo.myadapter;
import myadapter.MyAdapter;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;
public class MainActivity extends Activity {
private MyAdapter adapter;
private ListView lv;
private String[] data = {"张飞","关羽","刘备"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.listView1);
//Adapter加载内容
adapter = new MyAdapter(this, data);
//绑定ListView
lv.setAdapter(adapter);
}
}
运行结果:就像简易的电话本一样,上面有张飞,关羽,刘备的名字,我们可以继续在上面添加控件,来丰富内容。
转载于:https://blog.51cto.com/libaiqiang/1281145