显示数据库中的图标

时间:2012-04-12 16:07:57

标签: android sqlite icons android-listview

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文件,我已经显示了一个图标(这是默认的android图标,但这不是我想要的)。有什么想法吗?

1 个答案:

答案 0 :(得分: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);