ImageView im CursorAdapter ersetzen

W

Wicki12

Ambitioniertes Mitglied
0
Hallo,

Code:
    private void fillDataInfo(String s) {
    //s ist eine WHERE-Klausel für das SELECT
        // alle Infos zum gewählten Eintrag
        Cursor c = mDbHelper.fetchAllInfos(s); //zum Datenbank-SELECT
        startManagingCursor(c);

        //*** ToDo: beide Felder müssen noch ergänzt werden
        String[] from = new String[] {
                DataBaseHelper.KEY_TITLE, DataBaseHelper.KEY_PHONE,
                DataBaseHelper.KEY_SURNAME,DataBaseHelper.KEY_PLACE,
                DataBaseHelper.KEY_ADDRESS,DataBaseHelper.KEY_EMAIL,
                DataBaseHelper.KEY_WEBSITE,DataBaseHelper.KEY_POSTCODE,
                DataBaseHelper.KEY_FIRSTNAME,DataBaseHelper.KEY_DESCRIPTION
        };
        int[] to = new int[] {
            R.id.textView4, R.id.textView5,R.id.textView3, R.id.textView2,
            R.id.textView1,    R.id.TextView01, R.id.TextView02,R.id.dummy,
            R.id.dummy,R.id.TextView07
        };
        
        // Now create an array adapter and set it to display using our row
        SimpleCursorAdapter notes =
            new SimpleCursorAdapter(this, R.layout.info, c, from, to);
        setListAdapter(notes);
    }
Mein Problem:
Zu dem SimpleCursorAdapter gehört eine ImageView und mehrere TextView's (entsprechende Einträge sind auch in der Layout-Datei enthalten). Erst aus der ROW_ID der Tabelle, verknüpft mit einer konstanten Zeichenkette, ergibt sich der Name (src-Attribut) der anzuzeigenden ImageView.
Wie kann ich nun auf die ImageView zugreifen und ihr den ermittelten Namen zuweisen ?

Bin dankbar für jeden Hinweis.

Gruß Wicki
 
Hallo,

habe eine Lösung (eher ein workaround) gefunden. Der Code sieht jetzt so aus:
Code:
    private void fillDataInfo(String s) {
        // alle Infos zur gewählten Gaststätte
        Cursor c = mDbHelper.fetchAllInfos(s);
        startManagingCursor(c);

        //*** ToDo: beide Felder müssen noch ergänzt werden
        /*
         * Der KEY_ROWID-String korrespondiert mit R.id.imageView2, das
         * wiederum steht für das Bild der Gaststätte. Damit diese ImageView
         * im MyViewBinder verfügbar ist, muss sie quasi scheinbar dem Cursor
         * unterstellt werden, dazu wurde die KEY_ROWID-Spalte benutzt.
         */
        String[] from = new String[] {
                DataBaseHelper.KEY_TITLE, DataBaseHelper.KEY_PHONE,
                DataBaseHelper.KEY_SURNAME,DataBaseHelper.KEY_PLACE,
                DataBaseHelper.KEY_ADDRESS,DataBaseHelper.KEY_EMAIL,
                DataBaseHelper.KEY_WEBSITE,DataBaseHelper.KEY_POSTCODE,
                DataBaseHelper.KEY_FIRSTNAME,DataBaseHelper.KEY_DESCRIPTION,
                DataBaseHelper.KEY_ROWID
        };
        int[] to = new int[] {
            R.id.textView4, R.id.textView5,R.id.textView3, R.id.textView2,
            R.id.textView1,    R.id.TextView01, R.id.TextView02,R.id.dummy,
            R.id.dummy,R.id.TextView07,
            R.id.imageView2
        };
        
        // Now create an array adapter and set it to display using our row
        SimpleCursorAdapter notes =
            new SimpleCursorAdapter(this, R.layout.info, c, from, to);
        setListAdapter(notes);
        //eigener Binder, steuert Übergabe der Tabellenspalten an die Views
        notes.setViewBinder(new MyViewBinder());
    }


    private class MyViewBinder implements SimpleCursorAdapter.ViewBinder {
      public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
          boolean res = false; //SimpleCursorAdapter handles the binding 
        int viewId = view.getId();
        TextView noteName=null;
        try {
          noteName = (TextView) view;
        } catch (ClassCastException cce) {
          //wenn ImageView vorliegt, wird behandelt im case-Fall imageView2
        }
        String s;
        switch(viewId) {
          case R.id.textView2:  //Ort
            //Ort und Postcode miteinander verknüpfen
            s = cursor.getString(
                      cursor.getColumnIndex(DataBaseHelper.KEY_POSTCODE));
            noteName.setText(cursor.getString(columnIndex)+", A-"+s);
            res = true;  //binding already handled
            break;
          case R.id.textView3:
            //Vor- und Nachname verknüpfen
              s = cursor.getString(
                      cursor.getColumnIndex(DataBaseHelper.KEY_FIRSTNAME));
              noteName.setText(s+" "+cursor.getString(columnIndex));
              res = true;
              break;
          case R.id.imageView2:
            ImageView iv = (ImageView)view;
            //_id aus dem Bildnamen (Bsp. where: _id=101) entnehmen
            int id=Integer.parseInt(where.substring(4));
            //ermittle die Ressource-id mit Hilfe des Reflection-API für die Klasse '...[B].R$drawable[/B]'
            int j=getDrawableId(id);
//            iv.setImageDrawable(getResources().getDrawable(j));
            if (iv.getId() == R.id.imageView2 && j > 0) {
              iv.setImageResource(j);
              res = true;
            }
            break; 
          default:
        }
        return res;
      }
    }
Dank allen Besuchern dieses Threads.

Gruß Wicki
 

Ähnliche Themen

D
  • djsnoopy
Antworten
6
Aufrufe
638
djsnoopy
D
S
Antworten
8
Aufrufe
530
swa00
swa00
D
  • Data2006
Antworten
14
Aufrufe
574
jogimuc
J
Zurück
Oben Unten