# Image dynamisch anhand von id in ImageView anpassen



## Sweetmuffin98 (13. Feb 2021)

Hallo zusammen,

ich bin noch ziemlich neu in der App-Entwicklung und hänge an einem speziellen Problem.
Ich möchte mir in einem RecyclerView eine Übersicht von Daten ausgeben lassen.
Diese Daten hole ich grob gesagt aus der Datenbank in der Klasse "MainActivity".

[CODE lang="java" title="MainActivity"]protected void onPostExecute(String result) {
            super.onPostExecute(result);
            try {
                JSONObject jsonResult = new JSONObject(result);
                int success = jsonResult.getInt("success");
                if (success == 1) {
                    JSONArray hof = jsonResult.getJSONArray("hof");
                    list.clear(); //clear array before adding data again to prevent duplications in record
                    for (int i = 0; i < hof.length(); i++) {
                        JSONObject hoff = hof.getJSONObject(i);
                        Integer id = hoff.getInt("HNr");
                        Integer eigenerzeugnis = hoff.getInt("ENr");
                        String name = hoff.getString("Hofname");
                        Integer plz = hoff.getInt("PLZ");
                        String adress = hoff.getString("Ortsname");
                        String strasse = hoff.getString("Straße");
                        String hausNr = hoff.getString("Hausnummer");
                        String image = hoff.getString("Path");

                        if(Hnr == id){
                            continue;
                        }

                        //add all data in the list on every iteration 
                        list.add(new CustomData(name, plz, adress, strasse, hausNr, "testbild", eigenerzeugnis)); 
                        Hnr = hoff.getInt("HNr");
                    }

                    //set the list data to the customDataAdapter to form into the list
                    recyclerView.setAdapter(new CustomDataAdapter(context, list));[/CODE]

Nun habe ich 2 XML-Klassen 1. activity_main, in der sich das RecyclerView befindet und customlayout, in der sich die verschiedenen Elemente wie TextView oder ImageView befinden.

Über die Klasse CustomDataAdapter füge ich grob gesagt die Daten aus der DB nun in die verschiedenen Views ein.
Nun habe ich 2 Bilder. Mit einer ID möchte ich ermitteln welches Bild der ImageResource übergeben werden soll. 

[CODE lang="java" title="CustomDataAdapter"]   public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        CustomData dataModel = list.get(position);
        Integer j = position;

        //bind data here
        holder.hofname.setText(dataModel.getName());
        holder.adresse.setText(dataModel.getAddress());
        holder.strasse.setText(dataModel.getStrasse());
        holder.plz.setText(String.valueOf(dataModel.getPLZ()));
        holder.hausNr.setText(dataModel.gethausNr());
        holder.itemView.setOnClickListener(new View.OnClickListener() {

        for ( j = 0; j <= list.size(); j++  ) {
                for (CustomData cd : list) {
                    Integer i = cd.geteigenerzeugnis();
                    switch(i) {
                        case 1:
                                holder.eigenerzeugnis.setImageResource(R.drawable.icn_on_bienenprodukte);
                                break;
                        case 2:
                                holder.eigenerzeugnis.setImageResource(R.drawable.icn_on_obst_gemuese);
                                break;
                    }
                }
            }
        }[/CODE]

Jetzt habe ich jedoch das Problem, dass alle Daten, das erste Bild zugeordnet bekommen, obwohl einmal case2 eintreten sollte.
Beim Debuggen habe ich bemerkt, dass für jede Position (Integer j) sämtliche IDs aller Daten erneut durchlaufen werden und die letzte auftauchende ID verwendet wird.
Stehe total auf dem Schlauch.

Vielleicht hat jemand von euch eine Idee?
Danke und liebe Grüße


----------



## mihe7 (13. Feb 2021)

Lass die äußere Schleife (beginnend bei Zeile 13) weg.


----------



## Sweetmuffin98 (13. Feb 2021)

mihe7 hat gesagt.:


> Lass die äußere Schleife (beginnend bei Zeile 13) weg.


Bereits probiert, leider hat das nicht funktioniert


----------



## mihe7 (13. Feb 2021)

Sweetmuffin98 hat gesagt.:


> Bereits probiert, leider hat das nicht funktioniert


Was heißt "hat nicht funktioniert"? Die äußere Schleife wird keinesfalls benötigt und sorgt für eine quadratische Laufzeit - jetzt ist die Laufzeit linear.

Bei genauerer Betrachtung des Codes fallen aber noch mehr Dinge auf: erstens ist der Spaß in einem OnClickListener (warum?), nicht jedoch in einer Methode (warum?), zweitens wozu brauchst Du überhaupt eine Schleife? Warum greifst Du nicht einfach über dataModel auf das Eigenerzeugnis zu?


----------



## Sweetmuffin98 (13. Feb 2021)

mihe7 hat gesagt.:


> Was heißt "hat nicht funktioniert"? Die äußere Schleife wird keinesfalls benötigt und sorgt für eine quadratische Laufzeit - jetzt ist die Laufzeit linear.
> 
> Bei genauerer Betrachtung des Codes fallen aber noch mehr Dinge auf: erstens ist der Spaß in einem OnClickListener (warum?), nicht jedoch in einer Methode (warum?), zweitens wozu brauchst Du überhaupt eine Schleife? Warum greifst Du nicht einfach über dataModel auf das Eigenerzeugnis zu?


Nachdem ich die äußere Schleife entfernt hat, hat sich nichts geändert. Die Bilder sind nicht in der Datenbank abgespeichert, sondern liegen im Ordner drawable. Da jeder Datzensatz mehrere Bilder beinhalten kann, muss ich diese dynamisch in einer Schleife iterieren können. Der OnClicklistener war ein überbleibsel, den ich übersehen hatte und nicht rausgenommen habe (Wollte den Code etwas kürzen).


----------

