H
Hagebutt
Neues Mitglied
- 0
Hi Forum,
ich versuche gerade ein kleines Problem mit meiner Listview zu lösen.
Meine ListView soll in jeder geraden Zeile einen String und in jeder ungeraden Zeile eine RadioGroup enthalten. Soweit klappt das eigendlich ganz gut, zumindest solange bis man scrollt.
Sobald man die Liste hoch oder runter fährt, werden plötzlich plätze getauscht, oder ich habe plötzlich zwei RadioGroup
untereinander etc...
Schuld müsste nach meiner Rechnung der Adapter sein, aber ich verstehe nicht warum :-(
Mein Code:
Der ViewHolder:
WAs verstehe ich an der Adaptergeschichte falsch?
Danke im voraus!
Grüße
ich versuche gerade ein kleines Problem mit meiner Listview zu lösen.
Meine ListView soll in jeder geraden Zeile einen String und in jeder ungeraden Zeile eine RadioGroup enthalten. Soweit klappt das eigendlich ganz gut, zumindest solange bis man scrollt.
Sobald man die Liste hoch oder runter fährt, werden plötzlich plätze getauscht, oder ich habe plötzlich zwei RadioGroup
untereinander etc...
Schuld müsste nach meiner Rechnung der Adapter sein, aber ich verstehe nicht warum :-(
Mein Code:
Code:
public class RadiogroupAdapter extends ArrayAdapter<Object>{
RadioGroup mRadioGroup;
TextView re;
Context context;
String TAG = "RGA";
private ArrayList<Object> items;
public RadiogroupAdapter(Context context, int textViewResourceId, ArrayList<Object> items) {
super(context, textViewResourceId, items);
this.context = context;
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolder holder;
if (v == null || v.getTag()==null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_items, null);
holder = new ViewHolder();
Object o = items.get(position);
if (o != null) {
if(o instanceof String){
re=((TextView)v.findViewById(R.id.listtv));
re.setText((CharSequence) o);
re.setPadding(10, 10, 10, 10);
holder.re=re;
}
else if(o instanceof String[]){
mRadioGroup = (RadioGroup)v.findViewById(R.id.radiobuttons);
mRadioGroup.setPadding(15, 10, 15, 10);
createRadioButtons((String[]) o);
holder.mRadioGroup=mRadioGroup;
}
}
v.setTag(holder);
}
else{
holder = (ViewHolder)v.getTag();
if(holder.re==null){
mRadioGroup= holder.mRadioGroup;
Log.d(TAG, "RG");
}
else{
re=holder.re;
Log.d(TAG,"RE");
}
}
return v;
}
private void createRadioButtons(String[] rating) {
LinearLayout.LayoutParams lp = new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT);
lp.setMargins(10, 10, 10, 10);
for (int j = rating.length-1; j >= 0; j--) {
RadioButton rb = new RadioButton(context);
rb.setTextColor(Color.BLACK);
rb.setTextSize(25.0f);
rb.setText(rating[j]);
rb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
RadioButton bb = (RadioButton)v;
bb.setSelected(true);
}
});
mRadioGroup.addView(rb,0,lp);
}
}
Der ViewHolder:
Code:
import android.widget.RadioGroup;
import android.widget.TextView;
public class ViewHolder {
RadioGroup mRadioGroup = null;
TextView re = null;
}
WAs verstehe ich an der Adaptergeschichte falsch?
Danke im voraus!
Grüße