• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Image dynamisch anhand von id in ImageView anpassen

S

Sweetmuffin98

Mitglied
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".

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

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.

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

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

mihe7

Top Contributor
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?
 
S

Sweetmuffin98

Mitglied
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).
 

Ähnliche Java Themen

Anzeige

Neue Themen


Oben