1.ArrayAdapter
只可以简单的显示一行文本
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
R.layout.item,//只能有一个定义了id的TextView
data);//data既可以是数组,也可以是List集合
2.SimpleAdapter
可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在Java代码中加工),
也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。
List<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;
for(int i =0; i < lengh; i++) {
Map<String,Object> item = new HashMap<String,Object>();
item.put("image", R.drawable.portrait);
item.put("title", mListTitle[i]);
item.put("text", mListStr[i]);
mData.add(item);
}
SimpleAdapter adapter = new SimpleAdapter(
this,
mData,
R.layout.item,
new String[]{"image","title","text"},
new int[]{R.id.image,R.id.title,R.id.text});
3.BaseAdapter
可以实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类,
正是由于继承了该类,需要我们重写一些方法,让我们可以在代码里控制列表的样式,更加灵活。
private class MyListAdapter extends BaseAdapter{
private Context mContext;
private int[] colors=new int[]{0xff626569,0xff4f5257 };
public MyListAdapter(Context context){
mContext=context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mListText.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView image=null; //这些控件可以单独封装成一个类(Holder),便与优化
TextView title=null;
TextView content=null;
if(convertView==null){
convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);
image=(ImageView) convertView.findViewById(R.id.color_image);
title=(TextView) convertView.findViewById(R.id.color_title);
content=(TextView) convertView.findViewById(R.id.color_text);
}
int colorPos=position%colors.length;
convertView.setBackgroundColor(colors[colorPos]);
title.setText(mListTitle[position]);
content.setText(mListText[position]);
image.setImageResource(R.drawable.portrait);
return convertView;
}
}
--------------------------下面样例列表页的控件单独封装成了一个类(Holder),便与优化-----
public class MyBaseAdapter extends BaseAdapter{
private LayoutInflater mInflater;
public MyAdapter(Context context){
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder=new ViewHolder();
convertView = mInflater.inflate(R.layout.vlist2, null);
holder.img = (ImageView)convertView.findViewById(R.id.img);
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.info = (TextView)convertView.findViewById(R.id.info);
holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
holder.title.setText((String)mData.get(position).get("title"));
holder.info.setText((String)mData.get(position).get("info"));
//给每一个列表后面的按钮添加响应事件
holder.viewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showInfo();
}
});
return convertView;
}
------------
public final class ViewHolder{
public ImageView img;
public TextView title;
public TextView info;
public Button viewBtn;
}
Eg.
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2QvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jNxkDOyMTN4ATMzcDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
1.MainActivity.java
package com.example.gridview;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
private GridView gv_main;
private MainAdapter adapter;
private List<Map<String,Object>> dataList;
private SimpleAdapter adapter2;
//1.准备数据源
String[] names=new String[]{"手机防盗","通讯卫士","软件管理","流量管理","进程管理","手机杀毒","缓存清理","高级工具","设置中心"};
int[] icons=new int[]{R.drawable.widget01,R.drawable.widget02,R.drawable.widget03,R.drawable.widget04,
R.drawable.widget05,R.drawable.widget06,R.drawable.widget07,R.drawable.widget08,
R.drawable.widget09};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dataList = new ArrayList<Map<String,Object>>();
gv_main=(GridView) findViewById(R.id.gv_main);
//2.新建适配器(BasedAdapter)
adapter2 = new SimpleAdapter(this, getData(), R.layout.item_main, new String[]{"image","text"}, new int[]{R.id.iv_item_icon,R.id.tv_item_name});
adapter = new MainAdapter(this ,names,icons);
//3.GridView加载适配器
gv_main.setAdapter(adapter2);//更改适配器即可转换方法
//4.GridView配置事件监听器(OnItemClickListener)
gv_main.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String name = names[position];
Toast.makeText(MainActivity.this, name, 0).show();
}
});
}
private List<Map<String , Object>> getData(){
for(int i = 0;i < icons.length; i++){
Map<String , Object> map = new HashMap<String, Object>();
map.put("image", icons[i]);
map.put("text", names[i]);
dataList.add(map);
}
return dataList;
}
}
2.MainAdapter.java
package com.example.gridview;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MainAdapter extends BaseAdapter {
private String[] names;
private int[] icons;
private Context context;
public MainAdapter(Context context,String[] names, int[] icons) {
super();
this.context = context;
this.names = names;
this.icons = icons;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return names.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return names[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView==null){
convertView=View.inflate(context, R.layout.item_main, null);
}
ImageView imageView = (ImageView) convertView.findViewById(R.id.iv_item_icon);
TextView textView = (TextView) convertView.findViewById(R.id.tv_item_name);
imageView.setImageResource(icons[position]);
textView.setText(names[position]);
return convertView;
}
}
3.activity_main.xml
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gv_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="3"
android:layout_marginTop="10dp"
android:verticalSpacing="5dp">
</GridView>
4.item_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="80dp"
android:layout_height="80dp"
android:orientation="vertical"
android:gravity="center" >
<ImageView
android:id="@+id/iv_item_icon"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tv_item_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="名称"
android:textSize="16sp" />
</LinearLayout>
只可以简单的显示一行文本