GridView三种适配器加点击事件《个人笔记》

来源:互联网 发布:淘宝客用返利网推广 编辑:程序博客网 时间:2024/05/22 21:57

终于全理解了
SimpleAdapter
第一种自己写的简单适配器

import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.GridView;import android.widget.SimpleAdapter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class MainActivity extends Activity implements AdapterView.OnItemClickListener {    private List<Map<String, Object>> dataList;//创建List<Map数组>简单适配器要用到的.    private int[] icon1 = {R.drawable.1, R.drawable.2};//获得要传入数据源图片的id集合数据源    //名字集合数据源    private String[] iconName1 = {"名字", "没想好"};    //声明简单适配器    private SimpleAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main_layout);        //实例化控件        GridView gridView = (GridView) findViewById(R.id.main_gridlayout);        //创建数据源对象        dataList = new ArrayList<Map<String, Object>>();        //新建简单适配器   需要上下文, 数据源, 自定义单个项布局文件, 字符串数组key值,  单个控件位置int数组        adapter = new SimpleAdapter(this, getDataList1(), R.layout.ltem, new String[]{"image1", "text1"}                , new int[]{R.id.image, R.id.text});        //加载适配器        gridView.setAdapter(adapter);        //加载点击事件监听器        gridView.setOnItemClickListener(this);    }    //填充数据源    public List<Map<String, Object>> getDataList1() {        //for循环填充数组        for (int i = 0; i < icon1.length; i++) {            Map<String, Object> map = new HashMap<String, Object>();            map.put("image1", icon1[i]);            map.put("text1", iconName1[i]);            dataList.add(map);        }        //返回值        return dataList;    }        //监听点击事件方法    @Override    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {        switch (MainActivity.this.icon1[position]) {            case R.drawable.acfun:            default:                return;            case R.drawable.1:                MainActivity.this.startActivity(new Intent(MainActivity.this, JaoActivity.class));                return;            case R.drawable.2:        }        MainActivity.this.startActivity(new Intent(MainActivity.this, Meixianghao.class));    }}

BaseAdapter
第二种抄前辈的做了改动,好像比简单适配器多了优化

package com.moon.overgridview;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import android.widget.AdapterView.OnItemClickListener;public class MainActivity extends Activity {    //声明gridView    private GridView gridView;    //图片的文字标题    private String[] titles = new String[]            {"pic1", "pic2", "pic3", "pic4", "pic5", "pic6", "pic7", "pic8", "pic9"};    //图片ID数组    private int[] images = new int[]{            R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,            R.drawable.pic4, R.drawable.pic5, R.drawable.pic6,            R.drawable.pic7, R.drawable.pic8, R.drawable.pic9    };    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        //实例化控件        gridView = (GridView) findViewById(R.id.gridview);        //新建自定义适配器        PictureAdapter adapter = new PictureAdapter(titles, images, this);        //加载适配器        gridView.setAdapter(adapter);        //加载点击事件监听器        gridView.setOnItemClickListener(new OnItemClickListener()        {            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {                Toast.makeText(MainActivity.this, "pic" + (position + 1), Toast.LENGTH_SHORT).show();            }        });    }}//自定义适配器class PictureAdapter extends BaseAdapter {    private LayoutInflater inflater;    //声明变量    private List<Picture> pictures;    public PictureAdapter(String[] titles, int[] images, Context context)    {        super();        //把适配类型实例化        pictures = new ArrayList<Picture>();        //这一行没看懂,感觉没什么用,为什么不在下面写,布局有问题        inflater = LayoutInflater.from(context);        //填充数据源        for (int i = 0; i < images.length; i++) {            Picture picture = new Picture(titles[i], images[i]);            pictures.add(picture);        }    }    @Override//      获取有几项数据    public int getCount() {        if (null != pictures) {            return pictures.size();        } else {            return 0;        }    }    //....    @Override    public Object getItem(int position) {        return pictures.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    //返回每一项的显示内容    public View getView(int position, View convertView, ViewGroup parent) {        //优化内容        ViewHolder viewHolder;        //如果conview是空        if (convertView == null) {            //把xml文件id转化为一个view对象            convertView = inflater.inflate(R.layout.picture_item, null);            //创建对象            viewHolder = new ViewHolder();            //将控件放在viewholder中            viewHolder.title = (TextView) convertView.findViewById(R.id.title);            viewHolder.image = (ImageView) convertView.findViewById(R.id.image);            //用setTag方法将viewHolder在View中保存            convertView.setTag(viewHolder);        } else {            //从view中取出            viewHolder = (ViewHolder) convertView.getTag();        }        //显示图片和文字        viewHolder.image.setImageResource(pictures.get(position).getImageId());        viewHolder.title.setText(pictures.get(position).getTitle());               return convertView;    }}class ViewHolder//内部类ViewHolder对控件实例进行缓存{    public TextView title;    public ImageView image;}class Picture//适配器的适配类型{    private String title;//图片名字    private int imageId;//图片的资源id    public Picture(String title, int imageId)//这里总感觉他写的有点多,我删了一部分多余的代码    {        super();        this.title = title;        this.imageId = imageId;    }    public String getTitle()    {        return title;    }//其实还可以精简的    public int getImageId()    {        return imageId;    }}

第三种自己临时写的ArrayAdapter适配器gridview
临时写的没加注释
先创建一个实体类作为适配器泛型

public class Character {    private int imageId;    private String name;    public Character(String name, int imageId) {        this.imageId = imageId;        this.name = name;    }    public int getImageId(){        return imageId;    }    public String getName(){        return  name;    }}

然后创建适配器布局和在主布局中写入一个gridview控件设id,接着新建自定义适配器

import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.TextView;import java.util.List;public class MyAdapter extends ArrayAdapter<Character>{    public int resourceId;    public MyAdapter(Context context, int textViewResourceId, List objects) {        super(context,textViewResourceId, objects);        resourceId =textViewResourceId;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        Character character = getItem(position);//获得实例        View view;        ViewHoleder viewHoleder;        if (convertView == null){            view = LayoutInflater.from(getContext()).inflate(resourceId,null);            viewHoleder = new ViewHoleder();            viewHoleder.fruitImage = (ImageView) view.findViewById(R.id.image);            viewHoleder.fruitName = (TextView) view.findViewById(R.id.text);            view.setTag(viewHoleder);        }else {            view = convertView;            viewHoleder = (ViewHoleder) view.getTag();        }        viewHoleder.fruitImage.setImageResource(character.getImageId());        viewHoleder.fruitName.setText(character.getName());        return view;    }    class ViewHoleder{        ImageView fruitImage;        TextView fruitName;    }}

最后写入MainActivity中代码

import android.app.Activity;import android.os.Bundle;import android.widget.GridView;import java.util.ArrayList;import java.util.List;public class MainActivity extends Activity {    private List<Character> list = new ArrayList<Character>();    private  int[] image1={R.drawable.pic1,R.drawable.pic2,R.drawable.pic3};    private  String name[] ={"1","2","3"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        addList();//初始化数组        //新建适配器        MyAdapter adapter =new MyAdapter(this,R.layout.gridview_item,list);        GridView gridView = (GridView) findViewById(R.id.main_gridlayout);        gridView.setAdapter(adapter);    }        //添加数据源    private void addList() {        for (int i=0; i<image1.length ;i++){            list.add(new Character(name[i],image1[i]));        }    }}
0 0