hyljava

          導(dǎo)航

          <2014年2月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          2324252627281
          2345678

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          相冊(cè)

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          ListView實(shí)現(xiàn)RadioButton的功能有bug改進(jìn)

          前言:之前做的ListView實(shí)現(xiàn)RadioButton的功能有bug,當(dāng)ListView控件的內(nèi)容超出屏幕可見(jiàn)區(qū)域時(shí),滑動(dòng)ListView控件會(huì)報(bào)錯(cuò),下面有為什么出錯(cuò)和解決方法進(jìn)行的注解,不多說(shuō)了,看源碼,有更好的解決辦法請(qǐng)指教

          1,MainActivity.java

          package com.excetop.listradio;

          import android.app.Activity;
          import android.os.Bundle;
          import android.util.Log;
          import android.view.View;
          import android.view.ViewGroup;
          import android.widget.BaseAdapter;
          import android.widget.Button;
          import android.widget.CompoundButton;
          import android.widget.ListView;
          import android.widget.RadioButton;
          import android.widget.CompoundButton.OnCheckedChangeListener;

          public class MainActivity extends Activity {
              private static final String TAG = "MainActivity";
              private ListView listView;
              @Override
              public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.main);
                  listView = (ListView) this.findViewById(R.id.list);
                  MyAdapter adapter = new MyAdapter();
                  listView.setAdapter(adapter);
              }
              private class MyAdapter extends BaseAdapter{
                  private String[] s = new String[]{"a","b","c","d","e","a","b","c","d","e","a","b","c","d","e","a","b","c","d","e"};
                  private int temp = -1;

                  @Override
                  public int getCount() {
                      // TODO Auto-generated method stub
                      return s.length;
                  }

                  @Override
                  public Object getItem(int position) {
                      // TODO Auto-generated method stub
                      return null;
                  }

                  @Override
                  public long getItemId(int position) {
                      // TODO Auto-generated method stub
                      return 0;
                  }

                  @Override
                  public View getView(int position, View convertView, ViewGroup parent) {
                      convertView = MainActivity.this.getLayoutInflater().inflate(R.layout.item, null);  //解決辦法: 每次都重新獲取View
                      Button button = (Button) convertView.findViewById(R.id.button);
                      button.setText(s[position]);
                      RadioButton radioButton = (RadioButton) convertView.findViewById(R.id.radioButton);
                      radioButton.setId(position);  //把position設(shè)為radioButton的id
                      radioButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                          
                          @Override
                          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                              
                              if(isChecked){
                                  //這段代碼來(lái)實(shí)現(xiàn)單選功能
                                  if(temp != -1){
                                      RadioButton tempButton = (RadioButton) MainActivity.this.findViewById(temp);
                                      if(tempButton != null){
                                         tempButton.setChecked(false);
                                      }
                                      
                                  }
                                  
                                  temp = buttonView.getId();
                                  Log.i(TAG,"you are women- -   " + isChecked + "   " + temp);
                                  
                              }
                          }
                      });
                      
                      //這里實(shí)現(xiàn)單選框選的回顯,解決了單選框移出屏幕范圍未選中狀態(tài)
                      if(temp == position){
                          radioButton.setChecked(true);
                      }
                      return convertView;
                  }
          //            Holder holder;
          //            if(convertView == null){    //1,當(dāng)?shù)谝淮渭虞dListView控件時(shí)  convertView為空 
          //                convertView = MainActivity.this.getLayoutInflater().inflate(R.layout.item, null); //所以當(dāng)ListView控件沒(méi)有滑動(dòng)時(shí)都會(huì)執(zhí)行這條語(yǔ)句
          //                holder = new Holder();
          //                convertView.setTag(holder);
          //            }else{
          //                holder = (Holder) convertView.getTag();
          //            }
          //            
          //            holder.button = (Button) convertView.findViewById(R.id.button);
          //            holder.button.setText(s[position]);
          //            
          //            holder.radioButton = (RadioButton) convertView.findViewById(R.id.radioButton);   //
          //            holder.radioButton.setId(position);  //2,因?yàn)檫@里對(duì)radioButton的id進(jìn)行重新設(shè)置,滑動(dòng)ListView時(shí)convertView不為空,上面的語(yǔ)句就沒(méi)法得到radioButton對(duì)象,這條語(yǔ)句就會(huì)報(bào)空指針異常
                    
          //            holder.radioButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
          //                
          //                @Override
          //                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
          //                    
          //                    if(isChecked){
          //                        if(temp != -1){
          //                            RadioButton tempButton = (RadioButton) MainActivity.this.findViewById(temp);
          //                            tempButton.setChecked(false);
          //                            
          //                        }
          //                        
          //                        temp = buttonView.getId();
          //                        Log.i(TAG,"you are women- -   " + isChecked + "   " + temp);
          //                        
          //                    }
          //                }
          //            });
          //            return convertView;
          //        }
          //        private class Holder{
          //            private Button button;
          //            private RadioButton radioButton;
          //        }
              }
          }

          2,item.xml

          <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <Button
              android:id="@+id/button"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:text="測(cè)試">
            
            </Button>
            
            <RadioButton
              android:id="@+id/radioButton"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              />  
           
          </LinearLayout>
          3, main.xml

          <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              >
          <TextView  
              android:layout_width="fill_parent" 
              android:layout_height="wrap_content" 
              android:text="@string/hello"
              />
              <ListView
                 android:id="@+id/list"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 />
          </LinearLayout>

          posted on 2014-02-22 22:58 何云隆 閱讀(259) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Android

          主站蜘蛛池模板: 黄山市| 怀安县| 溆浦县| 华宁县| 洪雅县| 铁岭县| 富源县| 朔州市| 六枝特区| 大安市| 犍为县| 石狮市| 汶上县| 盐津县| 芒康县| 阿拉尔市| 濉溪县| 水富县| 清镇市| 绥阳县| 河南省| 巴塘县| 龙南县| 治县。| 建昌县| 彭阳县| 株洲市| 鹤岗市| 东光县| 东方市| 门源| 申扎县| 明光市| 日喀则市| 蛟河市| 广州市| 江永县| 曲松县| 天祝| 沁水县| 苏尼特左旗|