Android:GridView中实现点击Item变色,再点击还原。

使用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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值