Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

ListView-Adapter funzt nicht richtig -> warum?

Das Thema "ListView-Adapter funzt nicht richtig -> warum?" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 17.01.2012, 14:29   #1 (permalink)
Neuer Benutzer

Registriert seit: 28.04.2011
Beiträge: 7
Abgegebene Danke: 4
Erhielt 0 Danke für 0 Beiträge
Standard ListView-Adapter funzt nicht richtig -> warum?

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:

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
Hagebutt ist offline   Mit Zitat antworten
Alt 17.01.2012, 15:19   #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
Standard AW: ListView-Adapter funzt nicht richtig -> warum?

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.
the_alien ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei the_alien für diesen Beitrag:
Hagebutt (17.01.2012)
Alt 17.01.2012, 15:47   #3 (permalink)
Neuer Benutzer

Registriert seit: 28.04.2011
Beiträge: 7
Abgegebene Danke: 4
Erhielt 0 Danke für 0 Beiträge
Standard AW: ListView-Adapter funzt nicht richtig -> warum?

Zitat:
Wo ist denn die schließende Klammer des ersten If-Statements?
Die schließt sich gleich nachdem ich den holder der view als tag übergeben habe.

Zitat:
Wo setzt du denn die Sachen auf unsichtbar wenn kein convertView angegeben ist?
Äh habe ich nicht immer eine convertview wenn meine Liste befüllt ist?
Hagebutt ist offline   Mit Zitat antworten
Alt 17.01.2012, 16:21   #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
Standard AW: ListView-Adapter funzt nicht richtig -> warum?

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.
the_alien ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei the_alien für diesen Beitrag:
Hagebutt (17.01.2012)
Alt 17.01.2012, 16:31   #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
Standard AW: ListView-Adapter funzt nicht richtig -> warum?

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.
strider ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei strider für diesen Beitrag:
Hagebutt (17.01.2012)
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

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




Du liest gerade: "ListView-Adapter funzt nicht richtig -> warum?" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.