2012-04-12 18 views
0

onCreate()方法:すべてのデータを表示するデータベースからアイコンを表示

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


    } 

マイrow.xmlファイル:

<?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> 

は私が成功したSQLiteを使用してテーブルを作成しました。私は表示される各データベース行にアイコンを表示したいです(ListViewを使用してください)、アイコンは行の特定の要素に依存する必要があります。たとえば、性別(DatabaseHelper.SEX)が男性の場合は男性アイコンを表示し、性別が女性の場合は女性アイコンを表示します。私のxmlファイルを見ると、既にアイコンが表示されています(デフォルトのアンドロイドアイコンですが、これは私が望むものではありません)。何か案は?

答えて

1

あなたは(SimpleCursorAdapterを拡張する)アダプターを所有作るだけbindView()メソッドをオーバーライドして、好きなようにアイコンを設定できます

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

} 

ListViewのため、そしてもちろんの使用このアダプタを追加することを忘れないでくださいクエリにDatabaseHelper.SEXコラム:

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

編集:

またはあなたが使用することができます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

おかげで、どのようにcolumnIndexが正確にセックスの列のインデックスを取得しないいくつかの時間 –

+0

を欲しがる、私は試してみましょうか?性別列は文字列データ型です –

+0

@da_scav_from_windy_city 'dataFrom'配列を見ると、(' dataTo'配列の) 'DatabaseHelper.SEX'と' R.id.icon'が'ViewBinder'は' setViewValue'メソッドであなたに与えるべきどのカラムインデックスを知っているのでしょうか?私が言ったように、データベースにどのようにセックスを格納しているのか分かりませんが、 'int'値(' sex'に応じて '0'または' 1')を使うと仮定しました。その 'String'を使用してください。 – Luksprog

関連する問題