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。

 
posted @ 2017-03-02 19:02  新感觉  阅读(4751)  评论(0编辑  收藏  举报