关于listview单选按钮的问题
一、以上为效果图
点击哪一个item那一个item处于被选中状态,当点击加减号时,加减号处于哪个item哪个item就处于被选中状态(蓝色)
具体实现代码如下(Activity中):
/** * 在onItemClickLinener中 list点击事件,实现单选按钮,imageview代替radiobutton */ //设置静态的历史索引,点击最后一行item上的加号时imageview选中状态改变 public static int checkIndex;//初始化为最后一行,即默认选中最后一行 //点击过的item,处于被选中状态,点击其他将改变背景达到单选的作用 public ImageView imageAgo2; @Override public void onItemClick(AdapterView<?> arg0, final View convertView, final int position, long arg3) { //如果点击的时第二行,弹出popupwindow if (position == 1) { showPopupWindow(convertView); showToast("弹出popuwindow"); } ///////////////////////////////////////////// //存在单选的item final ListView lv = (ListView) arg0; if (position > 6) { View item = lv.getChildAt(checkIndex);//得到历史选中状态的item,初始化时为最后一行,默认选中最后一行 //获取历史选中的imageview ImageView imageAgo = (ImageView) item.findViewById(R.id.buyhour_rbt); //将历史选中的imageview设为未选中的颜色 imageAgo.setBackgroundColor(Color.BLACK);//黑色为未选中状态 //得到当前选中的imageview final ImageView imageView = (ImageView) convertView.findViewById(R.id.buyhour_rbt); //将当前选中的imageview设为选中状态, imageView.setBackgroundColor(Color.BLUE);//蓝色为被选中状态 //当前点击的item赋予历史指针,成为历史,点击其他时,imageAgo根据此指针获取,然后变为未选中状态 checkIndex = position; //当前选中状态,即为历史状态的item View item2 = lv.getChildAt(checkIndex); //将要向适配器传递的imageview,即当前处于选中状态的list,此为公共(public) imageAgo2 = (ImageView) item2.findViewById(R.id.buyhour_rbt); //添加按钮
/********************************以下部分为未成功的范例,楼主在listview点击事件里添加点击加减号时的选中,但未成功,因为需要初始化
只有点击一次加减号处于的item时才会初始化,所以有bug,所以楼主还是在适配器里实现 ********************************************/ // Button add = (Button) convertView.findViewById(R.id.buyhour_add); // add.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) { // View item = lv.getChildAt(checkIndex);//得到历史选中状态的item // checkIndex = position;//当前点击的item赋予历史指针 // final ImageView imageAgo = (ImageView) item.findViewById(R.id.buyhour_rbt); // imageAgo.setBackgroundColor(Color.BLACK);//黑色为未选中状态 // final ImageView imageView = (ImageView) convertView.findViewById(R.id.buyhour_rbt); // imageView.setBackgroundColor(Color.BLUE);//蓝色为被选中状态 // } // }); // Button reduce = (Button) convertView.findViewById(R.id.buyhour_reduce); // reduce.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) { // View item = lv.getChildAt(checkIndex);//得到历史选中状态的item // checkIndex = position;//当前点击的item赋予历史指针 // final ImageView imageAgo = (ImageView) item.findViewById(R.id.buyhour_rbt); // imageAgo.setBackgroundColor(Color.BLACK);//黑色为未选中状态 // final ImageView imageView = (ImageView) convertView.findViewById(R.id.buyhour_rbt); // imageView.setBackgroundColor(Color.BLUE);//蓝色为被选中状态 // } // }); } ////////////////////////////////////////////////////// }
//适配器代码如下,在getView()内
//加法 add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (((BuyHourActivity)context).imageAgo2 != null) { ((BuyHourActivity)context).imageAgo2.setBackgroundColor(Color.BLACK); } imageView.setBackgroundColor(Color.BLUE);//被选中时的状态 //将activity中的历史索引改变掉,否则会有重复选择的bug出现 ((BuyHourActivity)context).checkIndex = position; } }); //减法同加法 reduce.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //从activity中获取到的历史item,即当前选中的item(此时还未点击reduce(减)按钮), //并将它改变为未选中时的颜色(黑色) if (((BuyHourActivity)context).imageAgo2 != null) { ((BuyHourActivity)context).imageAgo2.setBackgroundColor(Color.BLACK); } //当前item中的imageview改变为选中状态 imageView.setBackgroundColor(Color.BLUE);//被选中时的状态 //将当前选中状态的item索引赋予checkIndex(静态) ((BuyHourActivity)context).checkIndex = position; } });