1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

ImageView im CursorAdapter ersetzen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Wicki12, 22.07.2012.

  1. Wicki12, 22.07.2012 #1
    Wicki12

    Wicki12 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    57
    Erhaltene Danke:
    0
    Registriert seit:
    04.04.2012
    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
     
  2. Wicki12, 22.07.2012 #2
    Wicki12

    Wicki12 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    57
    Erhaltene Danke:
    0
    Registriert seit:
    04.04.2012
    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
     

Diese Seite empfehlen