zoukankan      html  css  js  c++  java
  • 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。

     
  • 相关阅读:
    字符串的格式化操作
    了解格式化输出,字符串和编码
    面试题2
    面试题1
    设计算法1
    C++ STL容器的理解
    网络是怎样连接的-路由器的附加功能
    网络是怎样连接的-路由器的包转发操作(下)
    网络是怎样连接的-路由器的包转发操作(上)
    网络是怎样连接的-交换机的包转发操作
  • 原文地址:https://www.cnblogs.com/xgjblog/p/6492082.html
Copyright © 2011-2022 走看看