2011-10-02 78 views
2

我已经在listview的每一行中创建了一个包含radiogroup的应用程序。问题是,当我滚动列表视图时,radiogroup的选择随着radiogroup的oncheckedevent多次触发而改变。多次激发listview中的radiogroup上的OnChecked事件

这是我的getView功能:

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     WeatherHolder holder = null; 

     if(row == null) 
     { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourceId, parent, false); 

      holder = new WeatherHolder(); 

      holder.imgIcon = (ImageView)row.findViewById(R.id.icon); 
      holder.txtTitle = (TextView)row.findViewById(R.id.toptext); 
      holder.rdgCategory = (RadioGroup)row.findViewById(R.id.radiogroup); 

      RadioGroup.OnCheckedChangeListener rdGrpCheckedListener = new RadioGroup.OnCheckedChangeListener(){ 

      @Override 
      public void onCheckedChanged(RadioGroup group, int checkedId) { 
       // TODO Auto-generated method stub 
//     setCategoryinList(position, checkedId); 
        switch (checkedId){ 
        case R.id.option1: 
         Log.i("WeatherAdapter","Data set index : " + position + " category : 1"); 
         data.get(position).setCategory(1); 
         break; 
        case R.id.option2: 
         Log.i("WeatherAdapter","Data set index : " + position + " category : 2"); 
         data.get(position).setCategory(2); 
         break; 
        default: 
         Log.i("WeatherAdapter","Data set index : " + position + " category : 0"); 
         data.get(position).setCategory(0); 
         break; 
        } 
       } 
      }; 

      holder.rdgCategory.setOnCheckedChangeListener(rdGrpCheckedListener); 

      row.setTag(holder); 
     } 
     else 
     { 
      holder = (WeatherHolder)row.getTag(); 
     } 

     Weather weather = data.get(position); 
     holder.txtTitle.setText(weather.getAppName()); 
     holder.imgIcon.setImageDrawable(weather.getIcon()); 
     int objCategory = weather.category; 
     Log.i("WeatherAdapter","Data get name : " + weather.getAppName() + " index : " + position + " category : " + objCategory); 
     switch (objCategory) 
     { 
      case option1: 
       holder.rdgCategory.check(R.id.option1); 
       break; 
      case option2: 
       holder.rdgCategory.check(R.id.option2); 
       break; 
      default: 
       holder.rdgCategory.check(R.id.none); 
       break; 
     } 
     return row; 
    } 

及以下,我得到的logcat的时候我滚动列表视图跟踪:

10-02 21:31:29.844: INFO/WeatherAdapter(28361): Data get name : ProgressBar index : 11 category : 0 
10-02 21:31:53.399: INFO/WeatherAdapter(28361): Data set index : 10 category : 1 
10-02 21:31:53.399: INFO/WeatherAdapter(28361): Data set index : 10 category : 0 
10-02 21:31:53.399: INFO/WeatherAdapter(28361): Data set index : 10 category : 0 

任何帮助表示赞赏。

回答

3

我已经在之前的回答中回答了它。所以你可以看看this answer