ListView Items wiederholen sich nach dem 3. Item

D

DrLiightninG

Neues Mitglied
1
Hallo zusammen,
ich habe eine ListView, welche mit mehreren Items gefüllt wird. Derzeit sind es insgesamt fünf (5) Items.
Diese werden alle aus meiner MySQL Datenbank richtig geladen. Nach dem Einfügen in die ListView (adapter.add(Item)) werden die Items auch alle richtig dargestellt. Das heißt überall sind die TextViews mit dem richtigen Inhalt gefüllt.
Allerdings habe ich mir die IDs der Items ausgeben lassen. Diese sehen folgendermaßen aus: ID 1, ID 2, ID 3, ID 1, ID 2.
Sie sollten jedoch in folgender Reihenfolge sein: ID1, ID 2, ID 3, ID 4, ID 5.
Den Fehler habe ich bisher noch nicht gefunden. Ich hoffe mir kann da jemand helfen.

Hier der Code vom Adapter:
Code:
import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

/**
* Created by Jan on 06.03.2016.
*/
public class PartyAdapter extends ArrayAdapter{

    List list = new ArrayList();
    MainActivity.PlaceholderFragment act;
    PartyItem partyItem;
    PartyAdapter pAdapter = this;

    public PartyAdapter(Context context, int resource) {
        super(context, resource);
    }

    public void setAct(MainActivity.PlaceholderFragment pAct) {
        act = pAct;
    }

    public void add(PartyItem object) {
        super.add(object);
        list.add(object);
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View row;
        row = convertView;
        final ItemHolder itemHolder;
        partyItem = (PartyItem) this.getItem(position);
        if(row == null) {
            LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = layoutInflater.inflate(R.layout.list_item_new,parent,false);

            itemHolder = new ItemHolder();
            itemHolder.name_tv = (TextView) row.findViewById(R.id.party_name);
            itemHolder.adresse_tv = (TextView) row.findViewById(R.id.party_adresse);
            itemHolder.zeit_tv = (TextView) row.findViewById(R.id.party_zeit);
            itemHolder.club_tv = (TextView) row.findViewById(R.id.party_club);
            itemHolder.addfav_b = (ImageView) row.findViewById(R.id.fav_b);
            itemHolder.age_pic = (ImageView) row.findViewById(R.id.age_pic);
          
            row.setTag(itemHolder);

        }
        else {
            itemHolder = (ItemHolder) row.getTag();

        }


        itemHolder.fav = partyItem.getPartyFav();
        itemHolder.id = partyItem.getPartyID();

//Hier die Ausgabe der Item ID:
        Toast.makeText(getContext(), "Party ID: " + itemHolder.id, Toast.LENGTH_LONG).show();

        itemHolder.age = partyItem.getPartyAge();
        if(itemHolder.age.equals("16")) {
            itemHolder.age_pic.setImageResource(R.drawable.ab16);
        }
        if(itemHolder.age.equals("18")) {
            itemHolder.age_pic.setImageResource(R.drawable.ab18);
        }

        itemHolder.item = (PartyItem) this.getItem(position);
       
        if(itemHolder.fav) {
            itemHolder.addfav_b.setImageResource(R.drawable.fav);
        }


        itemHolder.addfav_b.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
                if(!itemHolder.fav) {
                    itemHolder.fav = true;
                    act.addPartyFav(itemHolder.item);
                    itemHolder.addfav_b.setImageResource(R.drawable.fav);
                   
                }
                else {
                    itemHolder.fav = false;
                    act.removePartyFav(itemHolder.item, pAdapter);
                    itemHolder.addfav_b.setImageResource(R.drawable.addfavbunt);
                  
                }
            }
        });

//Diese Views werden richtig gefüllt:
        itemHolder.name_tv.setText(partyItem.getPartyName());
        itemHolder.club_tv.setText(partyItem.getClubName());
        itemHolder.adresse_tv.setText(partyItem.getPartyAdresse());
        itemHolder.zeit_tv.setText(partyItem.getPartyZeit());

        return row;
    }

    static class ItemHolder {
        TextView name_tv, zeit_tv, adresse_tv, club_tv;
        ImageView addfav_b, age_pic;
        int id;
        String age;
        boolean fav;
        PartyItem item;
    }

}

Gruß
Jan
 
Müsste meiner Meinung nach korrekt sein, da er die getView Methode immer dann aufruft, wenn die Liste bewegt wird. und immer die aufruft die der Benutzer sieht. D.h. Wenn du am Anfang 1-3 siehst und dann ein bisschen nach unten scrollst und du siehst 1-4 dann holt er sich die View ID1,ID2,ID3,ID4 erneut und somit taucht auch die ID wieder auf.

Um dir die richtige ID von dem jeweiligen Eintrag anzeigen zu lassen, kannst du vermutlich am besten ein OnClick Event für das Item erstellen und dort dann die ID als Toast auszugeben.
 

Ähnliche Themen

J
Antworten
5
Aufrufe
925
swa00
swa00
A
Antworten
10
Aufrufe
1.017
swa00
swa00
D
Antworten
9
Aufrufe
1.762
jogimuc
J
Zurück
Oben Unten