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
- GridView三种适配器加点击事件《个人笔记》
- 加一个点击事件
- 学习笔记,devexpress gridview l列头点击事件
- 鼠标三种点击事件
- android 三种点击事件
- GridView点击更换头像案例+适配器优化
- GridView点击行触发事件
- gridView的item点击事件
- //li加个点击事件
- ios 图片加点击事件
- gridview点击事件和滚动事件
- 2.三种点击事件的调用
- 按钮点击事件的三种写法
- Android点击事件的三种写法
- Android三种点击事件实现
- Android 点击事件(三种)
- android 三种点击事件实现
- devExpress之GridView小技巧(三):列标题点击事件
- JAVA文档注释1.1
- 采用SpringBoot+freemaker搭建项目
- ise工程移植到vivado中
- 一些很有用的 PHP 代码片段
- zookeeper概述,安装和配置
- GridView三种适配器加点击事件《个人笔记》
- 读写操作非常频繁的时候提高读的效率
- 先验概率、似然函数与后验概率
- 也许终将不再遗留成回忆
- 练习5:新浪微博
- spring的定时任务
- weka:调用内置算法挖掘数据关联规则
- 状态模式——对象行为型模式
- android 数据类型转换大全