2012-01-11 4 views
1

私のアプリケーションのハイスコアリストを作成しようとしています。 このリストはSQLデータベースに基づいています。名前を保存して、スコアがうまくいきます。 リストビューは、この行のXMLファイルに基づいています。SimpleCursorAdapterに設定されているListViewのImageViewのリソースを変更する方法

<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のイメージを表示する必要があることを望みます。 は、今の私は、ハイスコアのためにデータベースを経由して見えているカーソルがあります。

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

あなたは本当に "dbCursor.getInt(2)" このようなメッセージを避ける必要があります良い練習ではありません。2つではなく、行を識別するデータベースヘルパーから公開されたString Constantを持つ必要があります。 – JoxTraex

答えて

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は、getViewのCursorAdapterのサブクラスです。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) 
    } 
} 
+0

私はgetViewメソッドメソッドを持っていない... 私simpleCursorAdapterは次のようになります。 String []型のテキスト=新しいString [] {highscoreDBAdapter.KEY_PLAYERNAME、highscoreDBAdapter:私は何のgetViewメソッドメソッドを持っていない – user1128895

+0

... 私simpleCursorAdapterは次のようになります。 KEY_SCORE}; int []ここで= new int [] {R.id.NAME_CELL、R.id.SCORE_CELL}; sca = new SimpleCursorAdapter(this、R.layout.row、dbCursor、text、where); – user1128895

+0

どのようにgetView()メソッドと私のアダプタを一緒に置く必要があるのか​​分かりません。 – user1128895

0

あなたはこのような処理を行うには、カスタムアダプタを作成する必要があります。単純なカーソルはあなたのためにそれをしません。

サンプル:この例では、ArrayAdapterを使用していますが http://android.vexedlogic.com/2011/04/02/android-lists-listactivity-and-listview-ii-%E2%80%93-custom-adapter-and-list-item-view/

、それはprocesssにそれほど重要ではありません。プロセスは同じです。あなたはカスタムアダプターを作成する必要があります。カスタムカーソルクラスを作成したら、プリプロセスロジックでgetView(...)メソッドをオーバーライドします。データベースのヘルパーでコメント

説明:あなたのコードで

public static final int COL_NAME = 2; 

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