2012-01-11 2 views
1

내 응용 프로그램에 대한 HighscoreList를 만들려고합니다. 이 목록은 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" /> 

그리고 예를 들어 플레이어가 PICTURE_CELL 이미지 뷰는 이미지를 표시해야합니다 (10)의 점수에 도달하면 것을 원한다. 은 지금 나는 최고 기록에 대한 데이터베이스를 통해가는 모습되는 커서가 :

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()); 

을하지만 내가 각 행의 모든 ​​이미지 뷰의 리소스를 변경하는 방법을 모른다. 제발 도와주세요.이 날 동안 나를 죽이고 있습니다!

감사합니다.

+0

당신은 정말 "dbCursor.getInt (2)"이 같은 메시지를 피해야한다 좋은 습관이 아닙니다.2 대신에 행을 식별하는 데이터베이스 도우미로부터 노출 된 문자열 상수가 있어야합니다. – JoxTraex

답변

0

나는 귀하의 drawPictures 방법을 완전히 따르지는 않으나 검색어에 ORDER 키워드를 포함 시켜서 검색하는 것이 아니라 값이 정렬되도록 제안 할 것입니다.

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

는 전화 :

// where drawable is whatever image you would like to present 
imageView.setImageDrawable(Drawable drawable) 
를 점수가 10보다 큰

if(score > 10) 

인 경우는 당신이 할 수있는 경우

어댑터 getView 방법을 사용 getCursor().getInt(<score column>)에서 다음

및 확인

업데이트 댓글

SimpleCursorAdaptergetView이있는 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은 다음과 같습니다 없습니다 있습니다 – user1128895

+0

나는 아무의 getView 방법이 ... 내 simpleCursorAdapter은 다음과 같습니다 없습니다 있습니다 문자열 [] 텍스트 = 새로운 String [] {highscoreDBAdapter.KEY_PLAYERNAME, highscoreDBAdapter을. KEY_SCORE}; int [] where = 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

당신은 처리의이 종류를 할 수있는 사용자 정의 어댑터를 만들어야합니다. 간단한 커서는 당신을 위해 그것을하지 않습니다.

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

이 예제 ArrayAdapter와를 사용하지만, 그것은 processs에 문제가되지 그렇게 많이한다. 프로세스는 동일합니다. 사용자 지정 어댑터를 만들어야합니다. 일단 사용자 정의 커서 클래스를 작성하면 전처리 로직으로 getView (...) 메소드를 대체합니다. 데이터베이스 도우미에서 코멘트

설명 : 코드에서

public static final int COL_NAME = 2; 

,

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