如何在ListView中更改ImageView的资源,该资源设置为SimpleCursorAdapter

时间:2012-01-11 15:18:52

标签: android sql listview imageview simplecursoradapter

我正在尝试为我的应用程序制作HighscoreList。 此列表基于SQL数据库。保存名称,分数工作得很好。 ListView基于此行xml文件:

<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="4dip"
     android:paddingBottom="6dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">

     <TextView android:id="@+id/NAME_CELL"
         android:layout_width="250dip"
         android:layout_height="wrap_content"
         android:textSize="20dip" />

     <TextView android:id="@+id/SCORE_CELL"
         android:layout_width="20dip"
         android:layout_height="wrap_content" 
         android:textSize="20dip" />

     <ImageView android:id="@+id/PICTURE_CELL"
         android:layout_width="50dip"
         android:layout_height="20dip" 
         android:src="@drawable/no_picture" />

我希望例如,如果玩家得分为10,则PICTURE_CELL ImageView应显示图像。 现在我有一个Cursor,它正在通过数据库并查找Highscores:

public void drawPictures() 
    {       
        if (dbCursor.moveToFirst()) {      
            do 
            {
                                if(dbCursor.getInt(2)<=4)
                {
                            Log.d(TAG, "no picture");



                }
                else if((dbCursor.getInt(2) > 4) && (dbCursor.getInt(2) <= 9))
                {
                    Log.d(TAG, "picture1");


                }

                else if((dbCursor.getInt(2) > 9) && (dbCursor.getInt(2) <= 19))
                {
                    Log.d(TAG, "picture2");
                }

                else if(dbCursor.getInt(2) > 20)
                {
                    Log.d(TAG, "picture3");
                }
            }
            while (dbCursor.moveToNext());

但我不知道如何更改每行中每个ImageView的资源。 请帮助我,这几天都在杀我!

谢谢!

2 个答案:

答案 0 :(得分:0)

我没有完全遵循您的drawPictures方法,但我建议您在查询中加入ORDER关键字,这样您的值就会被排序而不是搜索。

然后在适配器getView方法中使用getCursor().getInt(<score column>)并检查分数是否大于10

if(score > 10)

如果是,你可以这样做:

ImageView imageView = ( ImageView ) view.findViewById( R.id.PICTURE_CELL )

然后致电:

// where drawable is whatever image you would like to present
imageView.setImageDrawable(Drawable drawable)
来自评论的

更新

你的SimpleCursorAdapter是CursorAdapter的一个子级,它有getView,你只需要扩展你的SimpleCursorAdapter并添加下面的方法。

你需要像这样过度使用这些方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    int score = dbCursor.getInt(<score column>)
    // You might need to call moveToPosition(position) or maybe you should use getItem(position) I have not tested it
    if(score > 10) {
        ImageView imageView = ( ImageView ) view.findViewById( R.id.PICTURE_CELL )
        // where drawable is whatever image you would like to present
        imageView.setImageDrawable(Drawable drawable)
    }
}

答案 1 :(得分:0)

您必须创建自定义适配器才能执行此类处理。一个简单的光标不适合你。

样品: http://android.vexedlogic.com/2011/04/02/android-lists-listactivity-and-listview-ii-%E2%80%93-custom-adapter-and-list-item-view/

虽然此示例使用ArrayAdapter,但对进程来说并不重要。这个过程是一样的。您必须创建自己的自定义适配器。一旦创建了自定义游标类,那么您将使用预处理逻辑覆盖getView(...)方法。

评论说明

在数据库助手中:

public static final int COL_NAME = 2;

在您的代码中,

dbCursor.getInt([Database Helper Object].COL_NAME)