TypedArray-Resource wird falsch geladen

MARJAVA

Aktives Mitglied
Hallo zusammen,

beim Programmieren einer Android App bin ich auf ein Problem gestoßen, dass ich noch nicht lösen konnte.
Ich habe Bilder in einem TypedArray als Resource abgespeichert. Doch beim Laden der Ressource in einem Listview läd er die Bilder teilweise in einer falschen Reihenfolge. Beim Loggen der Ressourceid scheint alles zu laufen, doch die angezeigten Bilder sind falsch geladen. Hat jemand eine Idee?
Java:
public class MainActivity extends AppCompatActivity {

    public ListView listView;
    public List<RowItem> rowItems=new ArrayList<RowItem>();
    public String[] categorie;
    private TypedArray profile_pics;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        categorie=getResources().getStringArray(R.array.tmdb);
        profile_pics=getResources().obtainTypedArray(R.array.profile_pics);
        for (int i=0; i<categorie.length; i++){
            Log.i("i=", String.valueOf(profile_pics.getResourceId(i,-1)));
            RowItem item= new RowItem(categorie[i],profile_pics.getResourceId(i,-1));
            rowItems.add(item);

        }
        listView=findViewById(R.id.listview);
        ListAdapter adapter=new ListAdapter(this,rowItems);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
                intent.putExtra("categorie",i);
                startActivity(intent);
            }
        });
    }
}
 

MARJAVA

Aktives Mitglied
Meine Klasse Listadapter
Java:
package de.markusc.tmdbfilms;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class ListAdapter extends BaseAdapter {

    Context context;
    List<RowItem> rowItems;


    ListAdapter(Context context, List<RowItem> rowItems){
        this.context=context;
        this.rowItems=rowItems;

    }
    @Override
    public int getCount(){
        return rowItems.size();
    }
    @Override
    public Object getItem(int position){
        return rowItems.get(position);
    }

    @Override
    public long getItemId(int position) {
        return rowItems.indexOf((getItem(position)));
    }



    private class ViewHolder{
        ImageView profile_pic;
        TextView categorie;


    }

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

        ViewHolder viewHolder=null;

        LayoutInflater myInflater= (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if(convertView==null){
            convertView=myInflater.inflate(R.layout.list_item,null);
            viewHolder=new ViewHolder();
            viewHolder.categorie=(TextView) convertView.findViewById(R.id.categorie);
            viewHolder.profile_pic=(ImageView) convertView.findViewById(R.id.profile_pics);

            RowItem row_pos=rowItems.get(position);

            viewHolder.profile_pic.setImageResource(row_pos.getProfile_pic_id());
            viewHolder.categorie.setText(row_pos.getCategorie());
            convertView.setTag(viewHolder);


        }else{
            viewHolder=(ViewHolder) convertView.getTag();
        }


        return convertView;
    }
}

meine Klasse RowItem
Java:
package de.markusc.tmdbfilms;

public class RowItem {

    private String categorie;
    private int profile_pic_id;
    public RowItem(String categorie, int profile_pic_id){
        this.categorie=categorie;
        this.profile_pic_id=profile_pic_id;
    }

    public String getCategorie(){
        return categorie;
    }

    public int getProfile_pic_id() {
        return profile_pic_id;
    }

    public void setCategorie(String categorie) {
        this.categorie = categorie;
    }

    public void setProfile_pic_id(int profile_pic_id) {
        this.profile_pic_id = profile_pic_id;
    }
}
 

Robat

Top Contributor
So richtig nachvollziehen / reproduzieren kann ich das Verhalten nicht. Wenn ich dein Code so übernehme mit einem Test-Array funktioniert es wunderbar.
Schick vielleicht noch mal dein TypedArray und welche Android-Version du benutzt. Dann versuch ich es mal zu reproduzieren.
 

MARJAVA

Aktives Mitglied
Meine Minimum API ist 23 und die Ziel Api ist 27.

Was mir aufgefallen ist, dass im Listadapter beim Auswählen der Listkomponente Nummer 4 die Variable position mit Nummer 2 angezeigt wird. Daraus resultiert, dass es nicht mehr Komponenten als 3 gibt und auch nicht mehr ausgewählt werden.
 

MARJAVA

Aktives Mitglied
Hat etwas gedauert, aber ich habe den Fehler gefunden. Er lag in der getView-Methode meines ListAdapters. Die 3 Zeilen unter der If-Schleife habe ich aus ihr herausgenommen. So funktioniert es.
Java:
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder viewHolder=null;
        Log.i("log position",String.valueOf(position));
        LayoutInflater myInflater= (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if(convertView==null){
            convertView=myInflater.inflate(R.layout.list_item,null);
            viewHolder=new ViewHolder();
            viewHolder.categorie=(TextView) convertView.findViewById(R.id.categorie);
            viewHolder.profile_pic=(ImageView) convertView.findViewById(R.id.profile_pics);




            convertView.setTag(viewHolder);


        }else{
            viewHolder=(ViewHolder) convertView.getTag();
        }
[COLOR=#ff0000]        RowItem row_pos=rowItems.get(position);
 
        viewHolder.profile_pic.setImageResource(row_pos.getProfile_pic_id());
 
        viewHolder.categorie.setText(row_pos.getCategorie());[/COLOR]

        return convertView;
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Reward Ads AdMob wird nicht ausgeliefert. Android & Cross-Platform Mobile Apps 9
J Spinner wird nicht aktualisiert Android & Cross-Platform Mobile Apps 6
Naxon89 Duplicate class kotlin - und dies ohne das es angewendet wird Android & Cross-Platform Mobile Apps 1
ImageView wird nicht angezeigt Android & Cross-Platform Mobile Apps 4
W Bildschirm Nutzung Überwachen der App Nutzer ink. was angeklickt wird Android & Cross-Platform Mobile Apps 35
N XY-Plottet keine Daten obwohl Funktion ausgeführt wird Android & Cross-Platform Mobile Apps 4
K Null-Pointer-Exception in ListView - wird über Datenbank gefüllt Android & Cross-Platform Mobile Apps 1
R Android Do not disturb: Sound wird nicht abgespielt Android & Cross-Platform Mobile Apps 2
O Google Admob Ad wird nicht geladen und App stürzt ab Android & Cross-Platform Mobile Apps 1
M Paper DB wird in Android Studio nicht erkannt Android & Cross-Platform Mobile Apps 7
R Audio wird nur 1 Mal abgespielt Android & Cross-Platform Mobile Apps 2
A GraphView => X- und Y-Achse wird nicht angezeigt Android & Cross-Platform Mobile Apps 5
A jpg wird im Android Studio nicht akzeptiert Android & Cross-Platform Mobile Apps 3
Arif Android Radiobutton wird nicht deaktiviert Android & Cross-Platform Mobile Apps 1
Arif Android Canvas wird nicht gezeichnet? Android & Cross-Platform Mobile Apps 0
J Notification wird nicht angezeigt wenn App nicht offen ist. Android & Cross-Platform Mobile Apps 6
W Preview wird nicht korrekt angezeigt Android & Cross-Platform Mobile Apps 0
B Profilpic wird nach anmeldung nicht angezeigt. Android & Cross-Platform Mobile Apps 2
K Methode wird nicht gefunden Android & Cross-Platform Mobile Apps 1
J Kamera - Foto wird nicht gespeichert Android & Cross-Platform Mobile Apps 2
V Android Wird mein Vorhaben funktionieren? (Apk Datei decompilieren, bearbeiten, compilieren) Android & Cross-Platform Mobile Apps 2
G App wird nach Installation auf Smartphone beendet Android & Cross-Platform Mobile Apps 1
L Dialog anzeigen wenn auf Button gedrückt wird. Android & Cross-Platform Mobile Apps 4
S Android neue Version des Programms wird nicht in Emulator geladen Android & Cross-Platform Mobile Apps 1
O Android Switch Widget wird nicht angezeigt Android & Cross-Platform Mobile Apps 1
M Android ListView wird nicht dargestellt Android & Cross-Platform Mobile Apps 2
N PriceScannerApp: warum wird nach dem Scannen Display gleich schwarz? Android & Cross-Platform Mobile Apps 4
P Herausfinden, welches Fragment gerade angezeigt wird. Android & Cross-Platform Mobile Apps 1
M Android Nur erste Zeile wird vom Server empfangen Android & Cross-Platform Mobile Apps 0
A App wird bei start des Timers beendet Android & Cross-Platform Mobile Apps 1
A Wieso wird die App beendet ??? Android & Cross-Platform Mobile Apps 2
B Alle Daten gehen verloren, wenn die Displaysperre aktiviert wird? Android & Cross-Platform Mobile Apps 21
P trotz invalidate() wird onDraw() nicht aufgerufen Android & Cross-Platform Mobile Apps 15
W XML Layout: wann wird geladen? Android & Cross-Platform Mobile Apps 10
K Android Temperaturconverter, R.id.element wird nicht gefunden Android & Cross-Platform Mobile Apps 20
A onDraw wird nicht aufgerufen Android & Cross-Platform Mobile Apps 14
A Android Dialog wird nicht sofort angezeigt Android & Cross-Platform Mobile Apps 12
W ImageView wird nicht angezeigt Android & Cross-Platform Mobile Apps 19
T Android: ListView-Adapter: Adapter wird ständig aufgerufen Android & Cross-Platform Mobile Apps 2
F Android Datenbank upgrade wird nicht durchgeführt Android & Cross-Platform Mobile Apps 2
F Android R.raw wird nicht gefunden Android & Cross-Platform Mobile Apps 5
P ID wird nicht erzeugt Android & Cross-Platform Mobile Apps 2
C Problem Device/Emulator wird nicht erkannt Android & Cross-Platform Mobile Apps 3
R Zeichen-Codierung in (SMS) TextMessage, "_" wird § Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben