Android ListFragment & ArrayAdapter - Button-Werte werden vergessen

speedy_g

Mitglied
Hallo,
ich verwende ein ListFragment zusammen mit einem ArrayAdapter.
In der Liste habe ich mehrere Einträge. Für jeden Eintrag sollen Buttons angezeigt werden - z.B. einer Löschen, der andere Bearbeiten. Es gibt Einträge in der Liste, die EditOnly sind (der Eintrag darf bearbeitet, aber nicht gelöscht werden). Für die soll der Löschen-Button nicht angezeigt werden. Funktioniert auch, nur manchmal vergißt der Button seine Einstellungen. Ich verstehe nur nicht wieso. Also manchmal werden Buttons, die für einen normalen Eintrag da sind auf InVisible gesetzt und der gesetzte OnClickListener ist auch nicht mehr vorhanden, als ob es ein EditOnly Eintrag wäre und manchmal werden bei dem einen EditOnly Eintrag die Buttons angezeigt. Ich habe momentan 6 Einträge. Der erste ist der "echte" EditOnly. Aber manchmal vergißt der ArrayAdapter/ListView das. Und manchmal sind dann der 5. oder 6. Eintrag auch EditOnly (also so wie die Buttons angezeigt werden - in der Datenbank bzw. values-Liste sind sie es nicht). Die Anzeige für die Einträge ist länger als das Display. Ich kann/muß also scrollen und dann wird das getView auch erneut aufgerufen. Ich setze momentan den Eintrag im OnCreate/OnUpgrade für die Datenbank auf EditOnly. Es ist also hardgecoded, welcher Eintrag EditOnly ist.

Code:
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View rowView = convertView;

        if(rowView == null) {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            rowView = inflater.inflate(R.layout.categorylist_rowlayout, parent, false);

            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.name = (TextView) rowView.findViewById(R.id.Name);
            viewHolder.buttonDelete = (Button) rowView.findViewById(R.id.ButtonDelete);
            viewHolder.buttonEdit = (Button) rowView.findViewById(R.id.ButtonEdit);

            //Hier zeigt er mir die richtigen Werte. Es ist die richtige Position, mit dem richtigen Eintrag und nur der EditOnly sein soll ist EditOnly
            Log.i("getView","Neu: Position: "+ position +", Name: " + values.get(position).getName() + ", EditOnly: "+ values.get(position).isEditOnly());

            if(values.get(position).isEditOnly())
            {
                viewHolder.buttonDelete.setVisibility(View.INVISIBLE);
            }
            else
            {
                viewHolder.buttonDelete.setVisibility(View.VISIBLE);
                viewHolder.buttonDelete.setOnClickListener(this);
            }

            viewHolder.buttonEdit.setOnClickListener(this);

            rowView.setTag(viewHolder);
        }

        //Hier zeigt er mir die richtigen Werte. Es ist die richtige Position, mit dem richtigen Eintrag und nur der EditOnly sein soll ist EditOnly
        Log.i("getView","Position: "+ position +", Name: " + values.get(position).getName() + ", EditOnly: "+ values.get(position).isEditOnly());

       
        ViewHolder viewHolder = (ViewHolder) rowView.getTag();
       
        //Wenn ich hier nicht noch einmal die Werte setzen würde, dann kann es vorkommen, daß unten
        //in der Log-Ausgabe ein Button auf Visible ist, den ich beim neu Anlegen auf Invisible
        //gesetzt habe oder umgekehrt. Der OnClickListener ist auch nicht mehr gesetzt.
        if(values.get(position).isEditOnly())
        {
            viewHolder.buttonDelete.setVisibility(View.INVISIBLE);
        }
        else
        {
            viewHolder.buttonDelete.setVisibility(View.VISIBLE);
            viewHolder.buttonDelete.setOnClickListener(this);
        }

        Log.i("getView","Invisible: "+(viewHolder.buttonDelete.getVisibility()==View.INVISIBLE));

        viewHolder.name.setText(values.get(position).getName());
               
        return rowView;
    }

Kann mir das jemand erklären wieso das so ist? Eigentlich dachte ich, ich habe für einen speziellen Eintrag auch einen neuen Button erstellt und das Objekt für den Eintrag auch extra im ViewHolder gespeichert, damit da keine Verwechslung geschehen kann. Und eigentlich dachte ich, ich bekomme von der ListView genau die RowView/das Objekt übergeben, das ich mal angelegt habe. Aber irgendwie bringt die ListView ja anscheinend doch die Buttons durcheinander.

MFG
speedy
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Android ListFragment & Backstack Android & Cross-Platform Mobile Apps 0
B Android ListFragment parse xml from File Android & Cross-Platform Mobile Apps 1
S Android ListFragment Android & Cross-Platform Mobile Apps 7
K Android ListFragment per SimpleCursorAdapter automatisch neufüllen Android & Cross-Platform Mobile Apps 6
W Picasso in ArrayAdapter Android & Cross-Platform Mobile Apps 13
J ArrayAdapter zeigt Liste nicht an Android & Cross-Platform Mobile Apps 0
H Android ArrayList <-> ArrayAdapter <-> ListView Android & Cross-Platform Mobile Apps 10
H Android Probleme mit SearchView in ArrayAdapter Android & Cross-Platform Mobile Apps 7
W Android Bestimmen von welchem Typ die Objekte in einem ArrayAdapter sind Android & Cross-Platform Mobile Apps 3
P Android Sort Methode von ArrayAdapter überschreiben Android & Cross-Platform Mobile Apps 5
A Probleme mit ListView / ArrayAdapter Android & Cross-Platform Mobile Apps 3
T Android Studio: Einen Button in einer For Schleife verwenden Android & Cross-Platform Mobile Apps 2
W App deinstallieren per Button & Andere App Öffnen per Button Android & Cross-Platform Mobile Apps 24
W Apk automatisch installieren per Button Android & Cross-Platform Mobile Apps 55
W aus Fragmente in andere Klasse wechseln mit Button Android & Cross-Platform Mobile Apps 3
T App updaten via Button Android & Cross-Platform Mobile Apps 10
AGW Android Teilen Button ändern Android & Cross-Platform Mobile Apps 14
A Button in SurfaceView integrieren Android & Cross-Platform Mobile Apps 10
J Android App - Browser öffnen und Text eingeben/Button click auslösen Android & Cross-Platform Mobile Apps 10
L Button zum Quadrad zwingen Android & Cross-Platform Mobile Apps 2
S Android Absoluter Neuling: EditText zur Laufzeit verändern bzw. über Button Android & Cross-Platform Mobile Apps 2
L Dialog anzeigen wenn auf Button gedrückt wird. Android & Cross-Platform Mobile Apps 4
B Android Abfragen wie lang ein Button gedrückt wurde Android & Cross-Platform Mobile Apps 2
J Android button mithilfe einer Methode automatisch erstellen Android & Cross-Platform Mobile Apps 6
A AlertDialog Enable Button Android & Cross-Platform Mobile Apps 1
J Button array ID Problem Android & Cross-Platform Mobile Apps 2
D Android Activity wechseln per Button Android & Cross-Platform Mobile Apps 3
B Android ringProgressDialog nach Erfolg Button einfärben Android & Cross-Platform Mobile Apps 2
A Android Menü Button oben links Android & Cross-Platform Mobile Apps 1
B Mit Button GeräteEinstellung des Handys öffnen Android & Cross-Platform Mobile Apps 3
M Android Android "Up-Button" extra definieren? Android & Cross-Platform Mobile Apps 1
K Problem mit arraylist und button Android & Cross-Platform Mobile Apps 16
T Button aktivieren per Qullcode... Android & Cross-Platform Mobile Apps 3
T Button geht net... Android & Cross-Platform Mobile Apps 2
D Man sieht nicht ob Button gedrückt wurde! Android & Cross-Platform Mobile Apps 10
K Grafik Tablerow, Button erstreckt sich in der gesamten Breite trotz Beschrenkung durch (max)width Android & Cross-Platform Mobile Apps 2
G Button ein Wert zuweisen Android & Cross-Platform Mobile Apps 5
M 20 Image Button für jede Auflösung positionieren Android & Cross-Platform Mobile Apps 3
B Android Button erstellen nach Vorlage Android & Cross-Platform Mobile Apps 4
L Android Button mit Pfeil nach rechts Android & Cross-Platform Mobile Apps 1
M Einzel Verarbeitung welcher Button angeklickt wurde? Android & Cross-Platform Mobile Apps 6
G Back-Button Methode überschreiben Android & Cross-Platform Mobile Apps 2
P Android Option Button Android & Cross-Platform Mobile Apps 4
G Check Button ist unchecked trotz setChecked(true) Android & Cross-Platform Mobile Apps 6
G Android Button mit Bild Android & Cross-Platform Mobile Apps 4
W Android App Programmierung - Button ganz transparent machen Android & Cross-Platform Mobile Apps 3
L Custom Dialog Button event Android & Cross-Platform Mobile Apps 2
J Button rechtsbündig Android & Cross-Platform Mobile Apps 5
A Android Button Array? Android & Cross-Platform Mobile Apps 6
P Android Button mit bild versehen Android & Cross-Platform Mobile Apps 4
J "Button" auf List erstellen Android & Cross-Platform Mobile Apps 4
U Fire button und Command.BACK, 1 kommen sich in die quere Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben