1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. Wicki12, 22.07.2012 #1
    Wicki12

    Wicki12 Threadstarter Android-Hilfe.de Mitglied

    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

    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
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[OFFEN] Widget zeigt keine ImageView an. Android App Entwicklung Montag um 09:39 Uhr
Wie ersetze ich .this bei einem Fragment? Android App Entwicklung 31.01.2017
schleife für image view animations Android App Entwicklung 24.10.2016
Imageview vs. Samsung S7 Edge Android App Entwicklung 16.10.2016
Du betrachtest das Thema "ImageView im CursorAdapter ersetzen" im Forum "Android App Entwicklung",