# TypedArray-Resource wird falsch geladen



## MARJAVA (2. Nov 2018)

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?

```
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);
            }
        });
    }
}
```


----------



## Robat (3. Nov 2018)

Sind nur die Bilder falsch oder auch die dazu gehörige Kategorie?


----------



## MARJAVA (3. Nov 2018)

auch die dazugehörige Kategorie ist falsch, passt aber wiederum zum Bild


----------



## Robat (3. Nov 2018)

Wie sieht ListAdapter aus?


----------



## MARJAVA (3. Nov 2018)

Meine Klasse Listadapter

```
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

```
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 (4. Nov 2018)

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 (6. Nov 2018)

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 (6. Nov 2018)

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.

```
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;
    }
```


----------

