2011-12-21 43 views
2

大家我创建一个自定义列表视图与动态单选按钮添加到radiogroup直到我得到我想要的,但是当我尝试选择第一行中的一个单选按钮,然后自动第一个按钮在第5,第9, 13行得到选择,当我选择第二行中的任何按钮,然后在6日,8日同一个按钮,结果收到了选择12行什么,我做错了,我的适配器类listview与广播组错误

public class InteractiveArrayAdapter extends ArrayAdapter<Model> { 
String tag = "Events"; 
private final List<Model> list; 
private final Activity context; 

public InteractiveArrayAdapter(Activity context, List<Model> list) { 
    super(context, R.layout.rowbuttonlayout, list); 
    this.context = context; 
    this.list = list; 
} 

static class ViewHolder { 
    protected TextView text; 
    protected CheckBox checkbox,checkbox1; 
    protected RadioGroup mgroup; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Log.d(tag," 3"); 
    View view = null; 
    if (convertView == null) { 
     LayoutInflater inflator = context.getLayoutInflater(); 
     view = inflator.inflate(R.layout.rowbuttonlayout, null); 
     final ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) view.findViewById(R.id.label); 
     //viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check); 
     //viewHolder.checkbox1 = (CheckBox) view.findViewById(R.id.checkbox1); 
     viewHolder.mgroup = (RadioGroup) view.findViewById(R.id.radioGroup1); 
     final RadioButton[] mbutton=new RadioButton[5]; 
      for(int l=0;l<5;l++){ 
       mbutton[l]=new RadioButton(context); 
       mbutton[l].setText("test"+l); 


       viewHolder.mgroup.addView(mbutton[l]); 

      } 
      viewHolder.mgroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
       public void onCheckedChanged(RadioGroup mRadioGroup, int checkedId) { 
        for(int i=0; i<mRadioGroup.getChildCount(); i++) { 
         RadioButton btn = (RadioButton) mRadioGroup.getChildAt(i); 
         //int t=table.indexOfChild(table_row); 
         //System.out.println(t); 
         int t=mRadioGroup.getId(); 
         System.out.println(t); 

         if(btn.getId() == checkedId) { 
           String text = btn.getText().toString(); 
           // do something with text 
           Log.d(text," event1"); 
           return; 
         } 
        } 
       } 
      }); 


     view.setTag(viewHolder); 
     Log.d(tag,"me"); 

    } else { 
     view = convertView; 
     Log.d(tag,"meeee"); 

    } 
    ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.text.setText(list.get(position).getName()); 

    Log.d(tag," event7"); 

    return view; 

} 

}

我我张贴我的工作代码,以便其他人看看它有帮助

public class InteractiveArrayAdapter extends ArrayAdapter<Model> implements OnClickListener { 
String tag = "Events"; 
private final List<Model> list; 
private final Activity context; 
int li,jh; 



public InteractiveArrayAdapter(Activity context, List<Model> list) { 
    super(context, R.layout.rowbuttonlayout, list); 
    this.context = context; 
    this.list = list; 
} 

static class ViewHolder { 
    protected TextView text; 
    protected CheckBox checkbox,checkbox1; 
    protected RadioGroup mgroup; 
    protected RadioButton mbutton; 
} 



@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    //Log.d(tag," 3"); 

    View view =null; 
    if (convertView == null) { 
     //System.out.println("ok"); 
     LayoutInflater inflator = context.getLayoutInflater(); 
     view = inflator.inflate(R.layout.rowbuttonlayout, null); 
     final ViewHolder viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) view.findViewById(R.id.label); 

     viewHolder.mgroup = (RadioGroup) view.findViewById(R.id.radioGroup1); 


     final RadioButton[] mbutton=new RadioButton[5]; 
      for(int l=0;l<5;l++){ 
       mbutton[l]=new RadioButton(context); 
       mbutton[l].setText("test"+l+position); 
       mbutton[l].setId(l+1); 
       mbutton[l].setOnClickListener(new View.OnClickListener(){ 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         RadioButton byt=(RadioButton) v; 
         byt.isChecked(); 
         byt.getId(); 
       Model element = (Model) viewHolder.mgroup.getTag(); 
         element.setBte(byt.getId()); 
          element.gte((String) viewHolder.text.getText()); 
         System.out.println("givemeresult"); 
        } 

        }); 


       viewHolder.mgroup.addView(mbutton[l]); 

       } 
     view.setTag(viewHolder); 
      viewHolder.mgroup.setTag(list.get(position)); 


    } else { 
     view = convertView; 
     ((ViewHolder) view.getTag()).mgroup.setTag(list.get(position)); 
     } 
    ViewHolder holder = (ViewHolder) view.getTag(); 
    view.getTag()).mgroup.getTag(); 
    holder.text.setText(list.get(position).getName()); 


    if (list.get(position).getName()==list.get(position).done()){ 

     holder.mgroup.check(list.get(position).isSelected()); 
    } 
    else { 

     holder.mgroup.clearCheck(); 
    } 




    return view; 

} 

回答

2

这是因为视图被重复使用。你必须设置holder.mgroup在如果(convertView == NULL)

您的代码有点被我改变的东西:

public class InteractiveArrayAdapter extends ArrayAdapter<Model> { 
String tag = "Events"; 
private final List<Model> list; 
private final Activity context; 

public InteractiveArrayAdapter(Activity context, List<Model> list) { 
    super(context, R.layout.rowbuttonlayout, list); 
    this.context = context.getApplicationContext(); 
    this.list = list; 
} 

static class ViewHolder { 
    protected TextView text; 
    protected CheckBox checkbox,checkbox1; 
    protected RadioGroup mgroup; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Log.d(tag," 3"); 
    View view = convertView; 
    ViewHolder viewHolder = null; 
    final RadioButton[] mbutton = null; 
    if (view == null) { 
     LayoutInflater inflator = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflator.inflate(R.layout.rowbuttonlayout, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) view.findViewById(R.id.label); 
     //viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check); 
     //viewHolder.checkbox1 = (CheckBox) view.findViewById(R.id.checkbox1); 
     viewHolder.mgroup = (RadioGroup) view.findViewById(R.id.radioGroup1); 

     // I'm not sure about this.. 
     // Begin 
     mbutton=new RadioButton[5]; 
     for(int l=0;l<5;l++){ 
      mbutton[l]=new RadioButton(context); 
      mbutton[l].setText("test"+l); 


      viewHolder.mgroup.addView(mbutton[l]); 

     } 

      viewHolder.mgroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
       public void onCheckedChanged(RadioGroup mRadioGroup, int checkedId) { 
        for(int i=0; i<mRadioGroup.getChildCount(); i++) { 
         RadioButton btn = (RadioButton) mRadioGroup.getChildAt(i); 
         //int t=table.indexOfChild(table_row); 
         //System.out.println(t); 
         int t=mRadioGroup.getId(); 
         System.out.println(t); 

         if(btn.getId() == checkedId) { 
           String text = btn.getText().toString(); 
           // do something with text 
           Log.d(text," event1"); 
           return; 
         } 
        } 
       } 
      }); 
     // End 

     view.setTag(viewHolder); 
     Log.d(tag,"me"); 

    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 

     // Begin 
     mbutton = viewHolder.mgroup; 
     // End 

     Log.d(tag,"meeee"); 

    } 
    ViewHolder holder = (ViewHolder) view.getTag(); 
    holder.text.setText(list.get(position).getName()); 

    Log.d(tag," event7"); 

    return view; 

} 

}

我实现一个ImageView的的(剥离) :

public class DealAdapter extends ArrayAdapter<DealObject> { 

private Context mContext; 
private Activity mActivity; 
private ArrayList<DealObject> mItems; 
private int mXmlId; 

public DealAdapter(Context context, int textViewResourceId, ArrayList<DealObject> items, Activity activity) { 
    super(context, textViewResourceId, items); 
    this.mContext = context.getApplicationContext(); 
    this.mActivity = activity; 
    this.mItems = items; 
    this.mXmlId = textViewResourceId; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    //View v = null; 
    View v = convertView; 
    ViewHolder holder = null; 
    RemoteImageLoader imageLoader = new RemoteImageLoader(mContext, true); 
    RemoteImageView dealImage = null; 

    DealObject mo = mItems.get(position); 
    try { 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(mXmlId, null); 
      holder = new ViewHolder(); 

      dealImage = (RemoteImageView) v.findViewById(R.id.deal_image); 

      holder.dealImage = dealImage; 
      v.setTag(holder); 
     } else { 
      // Get the ViewHolder back to get fast access to the ImageView. 
      holder = (ViewHolder) convertView.getTag(); 
      holder.dealImage.setBackgroundColor(Color.WHITE); 
      dealImage = holder.dealImage; 
     } 

     if(mo.getImage() != null){ 
      // calling reset is important to prevent old images from displaying in a recycled view. 
      dealImage.reset(); 
      holder.dealImage.setImageUrl(imageUrl); 
      try { 
       holder.dealImage.loadImage(); 
      } 
      catch (Exception ex) { 
      } 
     } 
    } 
    catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    return v; 
} 

private static final class ViewHolder { 
    private RemoteImageView dealImage; 
} 

}

+0

对不起,我没听懂你会怎么解释它。因为我是一个新手,这platfor m – Ghouse 2011-12-21 11:47:45

+0

嗨,请有人让我知道关于该集holder.mgroup答案 – Ghouse 2011-12-21 12:17:00

+0

当然。视图在列表视图中被回收。请检查这篇文章以更好地理解http://mobile.cs.fsu.edu/?p=527。你应该在“if(convertView == null)” – Dante 2011-12-21 12:24:44