首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android listview每个item里面有个radiobutton,如何弄radibutton的单选事件

2013-08-06 
android listview每个item里面有个radiobutton,怎么弄radibutton的单选事件如题android listview每个item

android listview每个item里面有个radiobutton,怎么弄radibutton的单选事件
如题   android listview每个item里面有个radiobutton,怎么弄radibutton的单选事件,点击某个radio的时候它选中,其他的取消,  牛人们,,,请给出具体的代码
  
在网上找的 都没有效果,要么就是只能点击一个不能换成其他的了,要么就是都选上了。。。

final RadioButton mRadioButton = (RadioButton) view
.findViewById(R.id.report_item_check);
mRadioButton.setChecked(false);//先把所有的设置为false

if(mRadioButton.getId()<=position){
mRadioButton.setId(position);
}


mRadioButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//在这儿实现整个listView item 中的radioButton的单选
if(isChecked)
{
if(temp!=-1)
{
RadioButton tempRadio =(RadioButton)view.findViewById(temp);
if(tempRadio !=null)
{
tempRadio.setChecked(false);
}
}
temp = buttonView.getId();
}

}
});
        if (position == mRadioButton.getId()) {
           mRadioButton.setChecked(true);
        } else {
            mRadioButton.setChecked(false);
        }        

//radioButton.setId(position);
//radioButton.setChecked(false);
//radioButton
//.setOnCheckedChangeListener(new OnCheckedChangeListener() {
//
//public void onCheckedChanged(
//CompoundButton buttonView, boolean isChecked) {
//if (radioButton.isChecked()==true) {
//temp=btn_id;
//btn_id = radioButton.getId();
//if (temp != -1 && temp != btn_id) {
//RadioButton tempButton = (RadioButton) view
//.findViewById(temp);
//if (tempButton != null) {
//tempButton.setChecked(false);
//}
//}
//}
//
//}
//});
//if (btn_id == position) {
//radioButton.setChecked(true);
//checked_map=map;
//} else {
//radioButton.setChecked(false);
//}
//

RadioButton listview Android
[解决办法]
发一下你的adapter的代码。
http://bbs.csdn.net/topics/390422655
我回答过的一个帖子,你们的需求类似。
[解决办法]
就是在adapter设置一个isClickedPosition
然后在getview的时候
只对isClickedPosition的view的radio设置isChecked(true)

在oncheckedchange中对adapter进行刷新
[解决办法]
ListView本身自带单选和多选模式,通过

listview.setChoiceMode()

可以设置
[解决办法]


package com.example.zdemo1;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.TextView;

public class ListBackground extends Activity {

    private List<String> dataList = new ArrayList<String>();
    
    private ListView lv;
    
    private int clickPosition = -1;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_background);
        for (char tempChar = 'a' ; tempChar <= 'z'; tempChar++){
            dataList.add(String.valueOf(tempChar));


        }
        lv = (ListView)findViewById(R.id.listView1);
        final MyAdapter ma = new MyAdapter();
        lv.setAdapter(ma);
        /*lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                if(position != clickPosition){
                    clickPosition = position;
                }
                else{
                    clickPosition = -1;
                }
                ma.notifyDataSetChanged();
            }
        });*/
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_list_background, menu);
        return true;
    }
    
    private class MyAdapter extends BaseAdapter{

        @Override
        public int getCount() {
            return dataList.size();
        }

        @Override
        public Object getItem(int position) {
            return dataList.get(position);


        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            /*TextView tv = new TextView(ListBackground.this);
            tv.setText(dataList.get(position));
            tv.setBackgroundColor(Color.WHITE);
            if(position == clickPosition){
                tv.setBackgroundColor(Color.BLACK);
            }
            return tv;
*/
            final int p = position;
            RadioButton rb = new RadioButton(ListBackground.this);
            rb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(isChecked){
                        clickPosition=p;
                    }
                    else{
                        clickPosition = -1;
                    }


                    notifyDataSetChanged();
                }
            });
            if(clickPosition == position){
                rb.setChecked(true);
            }
            else{
                rb.setChecked(false);
            }
            return rb;
        }
        
    }
}



我原来的代码改了一下。改成了都是radio
你看看把

不用找之前的radio
只需要一个int保存当前选中的positon,然后刷新整个list就好了
只把当前的radio设成true,其他的都设成false

主要看一下adapter的getview方法。

热点排行