2012-04-12 3 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'을 사용하면 그'String'을 사용하십시오. – Luksprog

관련 문제