2011-12-21 3 views
2

все, что я создаю пользовательский listview с динамическими радиообменами, добавляя в радиогруппу до того, что я получаю то, что хочу, но когда я пытаюсь выбрать одну радиокнопку в первой строке, тогда автоматически первая кнопка в 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 в ELSE Иф (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

жаль, что я не получил бы вы это объяснить .because я новичок в этом platfor m – Ghouse

+0

Привет, пожалуйста, никому, просто сообщите мне об этом наборе держателя.mgroup ответ – Ghouse

+0

Конечно. Представления перерабатываются в списке. Пожалуйста, проверьте эту статью для лучшего понимания http://mobile.cs.fsu.edu/?p=527. Вы должны установить radobutton.setChecked (true | false) в else {} из «if (convertView == null)» – Dante

Смежные вопросы