解决方案 »

  1.   

    发一下你的adapter的代码。
    http://bbs.csdn.net/topics/390422655
    我回答过的一个帖子,你们的需求类似。
      

  2.   

    就是在adapter设置一个isClickedPosition
    然后在getview的时候
    只对isClickedPosition的view的radio设置isChecked(true)在oncheckedchange中对adapter进行刷新
      

  3.   

    ListView本身自带单选和多选模式,通过listview.setChoiceMode()可以设置
      

  4.   


    设置了也没用,问题就在于这行代码,  RadioButton tempButton = (RadioButton) view  .findViewById(temp);  通过temp找不到之前设置过的那个radio导致每个都可以选中却不能取消
      

  5.   


    public void setItemView(final View view,  int position) {
    final HashMap<String, Object> map = (HashMap<String, Object>) helper
    .getPageData().getList().get(position);
    ImageView img = (ImageView) view
    .findViewById(R.id.report_item_img);
    TextView name = (TextView) view.findViewById(R.id.report_item_name);
    TextView money = (TextView) view.findViewById(R.id.report_item_money);
    TextView type = (TextView) view.findViewById(R.id.report_item_type);
    TextView content = (TextView) view
    .findViewById(R.id.report_item_content); if (map != null) {
    imageloader.DisplayImage(map.get("img").toString(), img);
    name.setText(map.get("name").toString());
    money.setText(map.get("money").toString());
    type.setText(map.get("mailway").toString());
    content.setText(!"".equals(map.get("repay_content").toString())&&map.get("repay_content").toString().length()>140?map.get("repay_content").toString().substring(0, 140).concat("..."):map.get("repay_content").toString());

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

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


    // 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);
    // }

    } else {
    Utils.showToast(ReportListActivity.this, "没有相关数据");
    } }
    问题在于通过temp找不到之前选中过的radio
      

  6.   


    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方法。
      

  7.   


    setChoiceMode(),不需要自己放置radioButton,listView每行后面会有一个小√,用于选择。
      

  8.   


    按照你说的解决了,不过代码要改下,if(clickPosition == position){
                    rb.setChecked(true);
                }
                else{
                    rb.setChecked(false);
                }
    要把else去掉,要不然都不会被选中。
    感谢~
      

  9.   


    按照你说的解决了,不过代码要改下,if(clickPosition == position){
                    rb.setChecked(true);
                }
                else{
                    rb.setChecked(false);
                }
    要把else去掉,要不然都不会被选中。
    感谢~说错了,是吧 if(isChecked){
                            clickPosition=p;
                        }
                        else{
                            clickPosition = -1;
                        }这里的else去掉~·
      

  10.   

    你好,看着有点乱,能不能给一个完整的adapter代码呀?
      

  11.   

    看着挺乱的,能不能发一个完整的adapter代码呀?
      

  12.   

    没看太懂,能不能把完整的activity 和adapter粘贴出来?