我正在尝试为我的应用程序制作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的资源。 请帮助我,这几天都在杀我!
谢谢!
答案 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)
您必须创建自定义适配器才能执行此类处理。一个简单的光标不适合你。
虽然此示例使用ArrayAdapter,但对进程来说并不重要。这个过程是一样的。您必须创建自己的自定义适配器。一旦创建了自定义游标类,那么您将使用预处理逻辑覆盖getView(...)方法。
评论说明
在数据库助手中:
public static final int COL_NAME = 2;
在您的代码中,
dbCursor.getInt([Database Helper Object].COL_NAME)