天天看点

GridView && ArrayAdapter && SimpleAdapter && BaseAdapter【Android】

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.

GridView &amp;&amp; ArrayAdapter &amp;&amp; SimpleAdapter &amp;&amp; BaseAdapter【Android】

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>
           

只可以简单的显示一行文本