| |||||||
Das Thema "ListView-Adapter funzt nicht richtig -> warum?" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Registriert seit: 28.04.2011
Beiträge: 7
Abgegebene Danke: 4
Erhielt 0 Danke für 0 Beiträge
| 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);
}
} Code: import android.widget.RadioGroup;
import android.widget.TextView;
public class ViewHolder {
RadioGroup mRadioGroup = null;
TextView re = null;
} ![]() Danke im voraus! Grüße |
| | |
| | #2 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
Wo ist denn die schließende Klammer des ersten If-Statements? Wo setzt du denn die Sachen auf unsichtbar wenn kein convertView angegeben ist?
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| Folgender Benutzer bedankt sich bei the_alien für diesen Beitrag: | Hagebutt (17.01.2012) |
| | #3 (permalink) | ||
| Neuer Benutzer Registriert seit: 28.04.2011
Beiträge: 7
Abgegebene Danke: 4
Erhielt 0 Danke für 0 Beiträge
| Zitat:
Zitat:
Äh habe ich nicht immer eine convertview wenn meine Liste befüllt ist?
| ||
| | |
| | #4 (permalink) |
| Android Guru Modell: T-Mobile G1, Nexus One, Samsung Galaxy Tab 10.1, Samsung Galaxy Nexus Registriert seit: 04.05.2009
Beiträge: 1.599
Abgegebene Danke: 128
Erhielt 210 Danke für 193 Beiträge
|
Natürlich hast du den dann, aber wenn doch ein View mit RadioGroup befüllt ist, die aber etwas anderes haben möchtest, wo wird die RadioGroup ausgeblendet? Als convertView bekommst du ja einen schon befüllten View übergeben den du entsprechend ändern musst.
__________________ Follow/Add/Circle/Whatever me on Google+ Solitaire HD, ein Solitaire optimiert für Honeycomb. |
| | |
| Folgender Benutzer bedankt sich bei the_alien für diesen Beitrag: | Hagebutt (17.01.2012) |
| | #5 (permalink) |
| Android-Hilfe.de Mitglied Modell: Nexus S Registriert seit: 30.09.2011
Beiträge: 137
Abgegebene Danke: 8
Erhielt 35 Danke für 33 Beiträge
|
Das Problem ist, dass die alten convertviews unverändert durch getView() durchrasseln. Wenn da gerade eine RadioGroup zum recyclen als convertview ankommt das letzte erstellte Element aber auch eine RadioGroup war dann hast du in deiner Liste zwei RadioGroups unter einander.
|
| | |
| Folgender Benutzer bedankt sich bei strider für diesen Beitrag: | Hagebutt (17.01.2012) |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| G-Sensor funzt nicht richtig | To0Fast4Pain | Root / Hacking / Modding für HANNspree HANNSpad (SN10T1) | 24 | 15.01.2012 17:20 |
| Ö3 für Android funzt nicht richtig | Screamboy87 | Foto und Multimedia | 1 | 02.12.2011 07:05 |
| Wlan funzt nicht richtig | untermieter83 | Samsung Galaxy Ace (S5830) Forum | 0 | 05.11.2011 16:28 |
| Automatische Bildschirmhelligkeit funzt nicht richtig | GMoN | Motorola Atrix Forum | 3 | 26.09.2011 18:50 |
| W-Lan unter 1.6 funzt nicht richtig | Bogi | T-Mobile G1 Forum | 4 | 27.10.2009 16:54 |