使用GridView时想实现点击其中的一个Item,该Item改变背景,再次点击Item变回原来的背景,网上搜了很多资料都没有看到类似的案例,但还是有所启发,现来分享我的做法。

首先,首先为GridView自定义adapter适配器,继承BaseAdapter类。

实现效果的重要因素如下,为item设置一个标记点击状态的数组。

public class gridAdapter extends BaseAdapter {

    final itemLength = 16;
private LayoutInflater layoutInflater;
private List<String> gridDataList = new ArrayList<>();
private int clickTemp = -1;//标识被选择的item
private int[] clickedList=new int[itemLength];//这个数组用来存放item的点击状态
private Context c; gridAdapter(Context context){
c = context;
layoutInflater = LayoutInflater.from(context);
for (int i =0;i<itemLength;i++){
clickedList[i]=0; //初始化item点击状态的数组
}
} ----------
以下代码省略
---------- }

然后在定义的adapter中写一个方法,用于识别当前被选择的item

    public void setSeclection(int posiTion) {
clickTemp = posiTion;
}

在setOnItemClickListener中.将点击的Item位置通过setSeclection( )传到adapter。

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
gridadapter.setSeclection(position);
gridadapter.notifyDataSetChanged();
}
});

接下来adapter中很重要的重载方法getView()。

   @Override
public View getView(int position, View convertView, ViewGroup parent) { //..................代码省略 if(clickTemp==position){ //根据点击的Item当前状态设置背景
if (clickedList[position]==0){
convertView.setBackgroundColor(Color.BLUE);
clickedList[position]=1;
}
else { convertView.setBackgroundColor(Color.TRANSPARENT);
clickedList[position]=0;
}
} //..................代码省略 }

提醒:不要忘了notifyDataSetChanged(),否则点击效果不会显示。 
在修改适配器绑定的数据后,利用notifyDataSetChanged()刷新Item。

 

Android:GridView中实现点击Item变色,再点击还原。的更多相关文章

  1. javascript点击变绿色再点击变红色

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. checkbox点击选中,再点击取消,并显示在文本框中

    function checkItem(e,itemId) { var item = document.getElementById(itemId); var $items = $(item); if ...

  3. jquery实现点击显示,再点击隐藏

    //点击a标签,轮流显示和隐藏<div id="timo" style="background-color:red;height:50px;width:50px;& ...

  4. vue实现动态绑定class--(boolean)绑定class,点击有,再点击取消

    <template> <div :class="{'flag':selected}" @click=clickBtn>xxx</div>< ...

  5. jq点击显示,再点击隐藏

    每次都会遇到的问题: <script> $("button").click(function(){ if($(".div").css("d ...

  6. jquery checkbox点击选中,再点击取消选中

    if(n==1){ if($("#abs1").is(':checked')){ $("#abs1").prop("checked",fal ...

  7. Android GridView使用View.GONE只隐藏内容而不隐藏空间的解决方案

    最近在处理GridView的时候遇到这样一个问题:Android手机客户端接收服务端返回的一串数据(数据条数不固定),这串数据不一定都要显示到GridView上,也就是说有一部分内容需要隐藏掉,即有一 ...

  8. Android——GridView(网格视图)相关知识总结贴

    Android API中文文档GridView http://www.apkbus.com/android-14131-1-1.html   Android API 中文 (15) —— GridVi ...

  9. Android Studio 中设置代码块自动补齐

    AS中很多提示键,并不如Eclipse中做的好,需要我们自己去自定义.这里以switch...case为例,讲解一下如何设置代码自动补全. 1.进入settings -->  Editor -- ...

随机推荐

  1. spring cloud-给Eureka Server加上安全的用户认证

    前言 在前面的一篇文章中 spring cloud中启动Eureka Server 我们启动了Eureka Server,然后在浏览器中输入http://localhost:8761/后,直接回车,就 ...

  2. Dropwizard框架入门

    最近项目用到了Dropwizard框架,个人感觉还不错,那么这里就从他们官网入手,然后加上自己的实现步骤让大家初步了解这个框架. 官网对DW(Dropwizard)的定义是跨越了一个库和框架之间的界限 ...

  3. C#一个FTP操作封装类FTPHelper

    参考了网上一些代码,作了一些调整优化. 001 using System; 002 using System.Collections.Generic; 003 using System.Linq; 0 ...

  4. python 读写CSV文件

    #-*- coding: UTF-8 -*- import csv import os def WriteToCsv(): '''写CSV文件''' titls = ['序号', '链接', '备注' ...

  5. Dijkstra(迪杰斯特拉)算法求解最短路径

    过程 首先需要记录每个点到原点的距离,这个距离会在每一轮遍历的过程中刷新.每一个节点到原点的最短路径是其上一个节点(前驱节点)到原点的最短路径加上前驱节点到该节点的距离.以这个原则,经过N轮计算就能得 ...

  6. 【转】Arp的攻防实战

    坦白讲,我是个小白,也就是各大黑客和安全厂商所说的目标群体,前者是攻击我,后者有可能保护我.但是无论如何,这次后者应该也很无能为力了——我遭遇到了传说中的Arp攻击. 在连续一周的时间里,我发现我无法 ...

  7. javascript格式化json显示

    // Example usage: http://jsfiddle.net/q2gnX/ var formatJson = function(json, options) { var reg = nu ...

  8. C#.NET常见问题(FAQ)-无法直接启动带有类库输出类型的项目怎么办

    我把Driver.cs文件去掉了一行注释,发现报错   右击这个解决方案,选择属性,然后再启动项目中改成MySample   更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http:// ...

  9. 天气预报的Ajax效果

    最近在网站上看了很多显示实时天气预报的,挺实用而且用户体验也不错.对用户的帮助也比较大,用户可以通过你的网站了解到实时的天气信息.感觉比较有意思,于是自己钻研了一下其中的实现方法.于是决定把代码分享给 ...

  10. picture control控件

    注意:picture control控件,需要先更改其ID再使用. CImage myImage; CFileDialog fileDlg(TRUE,NULL,NULL,OFN_ALLOWMULTIS ...