关于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;
            }
        });

 

 

 

 

posted on 2015-12-29 16:27  阿岳  阅读(434)  评论(0编辑  收藏  举报

导航