2012-04-12 8 views
0

onCreate() Methode:Anzeige ein Symbol aus der Datenbank

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.database); 

     ListView lv=(ListView)findViewById(R.id.mylist);  
     dbh = new DatabaseHelper(this); 
     c = dbh.getReadableDatabase().rawQuery("SELECT _id, " + 
         DatabaseHelper.NAME + 
       ", " + DatabaseHelper.LASTNAME + 
       ", " + DatabaseHelper.ans2 + 
       " FROM " + 
       DatabaseHelper.TABLE_NAME, null); // initializing 


     String[] dataFrom ={DatabaseHelper.NAME, DatabaseHelper.LASTNAME, DatabaseHelper.ans2}; 
     int[] dataTo = {R.id.name, R.id.value1, R.id.value2}; 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
        R.layout.row, c, dataFrom, dataTo); 
     lv.setAdapter(adapter); 
     registerForContextMenu(lv); 


    } 

Meine row.xml Datei alle Daten anzuzeigen:

<?xml version="1.0" encoding="utf-8"?> 


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" > 


<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="left" 
    android:layout_weight="30" 
    android:id="@+id/name" 
    /> 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="40" 
    android:gravity="center_horizontal" 
    android:id="@+id/value1" 
    /> 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="30" 
    android:gravity="right" 
    android:id="@+id/value2" 
    /> 


<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="right" 
    android:src="@drawable/ic_launcher" 
    android:id="@+id/icon" 
    /> 


</LinearLayout> 

ich erfolgreich eine Tabelle mit SQLite erstellt haben. Ich möchte in jeder Datenbankzeile ein Symbol anzeigen, das angezeigt wird (mit ListView) und das Symbol sollte von einem bestimmten Element aus der Zeile abhängen. Zum Beispiel, wenn das Geschlecht (DatabaseHelper.SEX) männlich ist, dann würden wir ein männliches Symbol anzeigen, und wenn das Geschlecht weiblich ist, würden wir ein weibliches Symbol anzeigen. Wenn Sie sich meine XML-Datei ansehen, habe ich bereits ein Symbol (das ist das Standard-Android-Symbol, aber das ist nicht was ich will). Irgendwelche Ideen?

Antwort

1

Sie könnten Sie besitzen machen Adapter (Erweiterung SimpleCursorAdapter) und überschreiben nur die bindView() Methode und setzen Sie auf das Symbol, wie Sie möchten:

class CustomAdapter extends SimpleCursorAdapter { 

    public CustomAdapter(Context context, int layout, Cursor c, 
      String[] from, int[] to) { 
     super(context, layout, c, from, to); 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     // let the adapter fill the other items in the row 
     super.bindView(view, context, cursor); 
     // find the icon in the list row 
     ImageView icon = (ImageView) view.findViewById(R.id.icon); 
     // I don't know how you set up the DatabaseHelper.SEX column in your 
     //database, I assumed you have an int value, 0 for male and 1 for female 
     int sex = cursor.getInt(cursor.getColumnIndex("sex")); 
     if (sex == 0) { 
          //if male 
      icon.setImageResource(R.drawable.male_icon); 
     } else { 
          //if female 
      icon.setImageResource(R.drawable.female_icon); 
     } 
    } 

} 

Verwenden Sie diesen Adapter für Ihr ListView und natürlich nicht vergessen hinzufügen auf die Abfrage der DatabaseHelper.SEX Spalte:

c = dbh.getReadableDatabase().rawQuery("SELECT _id, " + 
         DatabaseHelper.NAME + 
       ", " + DatabaseHelper.LASTNAME + 
       ", " + DatabaseHelper.ans2 + ", " + DatabaseHelper.SEX + 
       " FROM " + 
       DatabaseHelper.TABLE_NAME, null); // initializing 

Edit:

Oder Sie verwenden ein ViewBinder:

c = dbh.getReadableDatabase().rawQuery("SELECT _id, " + 
         DatabaseHelper.NAME + 
       ", " + DatabaseHelper.LASTNAME + 
       ", " + DatabaseHelper.ans2 + ", " + DatabaseHelper.SEX + 
       " FROM " + 
       DatabaseHelper.TABLE_NAME, null); // initializing 


     String[] dataFrom ={DatabaseHelper.NAME, DatabaseHelper.LASTNAME, DatabaseHelper.ans2, DatabaseHelper.SEX}; 
     int[] dataTo = {R.id.name, R.id.value1, R.id.value2, R.id.icon}; 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
        R.layout.row, c, dataFrom, dataTo); 
     adapter.setViewBinder(new ViewBinder(){ 

      @Override 
      public boolean setViewValue(View view, Cursor cursor, 
        int columnIndex) { 
       if (view.getId() == R.id.icon) { 
        int sex = cursor.getInt(columnIndex); 
        if (sex == 0) { 
         ((ImageView) view).setImageResource(R.drawable.male_icon); 
        } else if (sex == 1){ 
         ((ImageView) view).setImageResource(R.drawable.female_icon); 
        } 

        return true;  
       } else { 
        return false; 
       } 

      } 

     }); 
    lv.setAdapter(adapter); 
+0

Dank, lassen Sie mich versuchen, einige Zeit –

+0

Gimme wie funktioniert genau den Index der Sex Spalte column zu bekommen? und die Sex-Spalte ist ein String-Datentyp –

+0

@da_scav_from_windy_city Wenn Sie sich das 'dataFrom'-Array ansehen, werden Sie feststellen, dass' DatabaseHelper.SEX' und das 'R.id.icon' (aus dem' dataTo'-Array) auf dem gleiche Position, so dass der 'ViewBinder' weiß, welchen Spaltenindex Sie in der' setViewValue' Methode erhalten sollen. Wie gesagt, ich weiß nicht, wie Sie das Geschlecht in der Datenbank speichern, ich habe einfach angenommen, dass Sie einen 'int' Wert (' 0' oder '1' abhängig vom Geschlecht) verwenden, wenn Sie eine' Zeichenfolge' verwenden und dann bekommen das 'String' und benutze das. – Luksprog

Verwandte Themen