2012-05-30 5 views
0

나는 이것을 이해할 수 없습니다. 지금여전히 sqlite 결과로 사용자 지정 커서 어댑터를 찾을 수 없습니다.

String CREATE_ACHIEVEMENTS_TABLE = "CREATE TABLE achievements (" 
      + "id INTEGER PRIMARY KEY," 
      + "name VARCHAR," 
      + "type VARCHAR," 
      + "value VARCHAR," 
      + "completed VARCHAR" 
      + ")"; 

내가 노력하고 무엇을 :이

내가 다음과 같은 구조 SQLite는 테이블이 .... 내 첫 안드로이드 응용 프로그램은 그래서 그런 멍청한 놈되는 저 좀 도와 및 베어하십시오이다 "완료"열을 "예"로 설정하면 내 목록보기에서 행의 텍스트 색을 녹색으로 지정해야합니다.

ive 튜토리얼을 읽고 코드 예제를 살펴보면 사용자 정의 커서 어댑터를 사용하여이를 구현하는 방법을 알 수 없습니다.) (

package com.dd.qsg; 

import java.util.ArrayList; 
import android.app.ListActivity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 

public class ShowAchievements extends ListActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.achievements); 

     DatabaseHandler db = new DatabaseHandler(this); 
     ArrayList<String> achievements = db.getAchievements(this); 

     this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, achievements)); 
    } 

} 

getAchievements :

ShowAchievements.java (메뉴 항목 "도전 과제보기"를 클릭하면이 활동이 시작됩니다) : 지금 내가 다음 코드를 사용하여리스트 뷰에 결과를 표시 위의 활동에 호출 기능 : 나는 내 ShowAchievements 활동 내에서 getAchievements()를 호출 할 때, 그것은 텍스트 녹색의 색상을 만들 수 있도록 사용자 정의 cursoradapter을 구현하려는 말했듯이

public ArrayList<String> getAchievements(Context context) { 
    ArrayList<String> achievementList = new ArrayList<String>(); 
    String selectQuery = "SELECT * FROM achievements ORDER BY id asc"; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if (cursor != null) { 
     if (cursor.moveToFirst()) { 
      do { 
       if (cursor.getString(4).equals("yes")) { 
        achievementList.add(cursor.getString(1)+" (completed)"); 
       } 
       else { 
        achievementList.add(cursor.getString(1)); 
       } 
      } while (cursor.moveToNext()); 
     } 
    } 
    else { 
     achievementList.add(context.getResources().getString(R.string.na)); 
    } 

    cursor.close(); 
    db.close(); 
    return achievementList; 
} 

listview 행이 "com pleted "는 데이터베이스의 해당 행에 대해"예 "로 설정됩니다. 나는 이것이 의미가 있기를 바랍니다. 나는 누군가가 나를 도와 물어 또 다른 질문에

, 그들은 이런 식으로 뭔가를 구현하기 위해 나에게 말했다 :

private class MyCursorAdapter extends CursorAdapter { 

    public MyCursorAdapter(Context context, Cursor c) { 
     super(context, c); 
    } 

    @Override 
    public void bindView(View v, Context context, Cursor cursor) { 
     if(cursor.getString(cursor.getColumnIndex("completed").equals("yes")){ 
      TextView tv = (TextView) v.findViewById(R.id.NAMEOFTEXTVIEW); 
      tv.setTextColor(Color.GREEN); 
     } 
    } 

    @Override 
    public View newView(Context arg0, Cursor arg1, ViewGroup arg2) { 
     LayoutInflater inflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(R.layout.achievement_item, parent, false); 
     return row; 
    } 
} 

내 질문은 getAchievements이() 내에서 호출 할 때 작동하도록 내가이 구현합니까 어떻게 내 활동 ??? 어떤 XML 파일을 추가해야합니까? 선형 뷰를 가진 xml 파일을 내부에 listview와 함께 추가해야합니까? 그러면 선형 레이아웃 및 텍스트 뷰가있는 별도의 XML 파일을 내부에 추가해야합니까? 또는 내가 listview 같은 레이아웃으로 textview 넣을 수 있습니까? cursorAapter 코드로 전체 getAchievements() 함수를 대체합니까?

누군가가 나를 도와 주시면 감사하겠습니다. 나는 이것을 구현하는 방법을 알지 못한다. 나는 몇몇 자습서를 읽는 것을 시도하고 다만 많은 것을 혼동하고있다. 만약 내가 이것을 할 수있는 방법을 이해하는 데 도움이되는 완전한 모범이나 어떤 것을 얻을 수 있다면 그것은 많은 도움이 될 것입니다. 나는 나를 위해 모든 코드를 작성해달라고 요청하지는 않지만, 정확히 어떻게하면되는지를 정확히 파악하는 데 도움이되는 것이 정말 굉장 할 것입니다. 나는 이것이 내가 코드 리팩토링하기 위해 할 수있는 모든 당신의 개발 환경을 재현 할 수 아니에요 때문에

답변

2

: 그것이 작동하는 방법

public class ShowAchievements extends ListActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     DatabaseHandler db = new DatabaseHandler(this); 
     Cursor cursor = db.getAchievements(this); 
     MyCursorAdapter cursorAdapter = new MyCursorAdapter(this, cursor); 

     this.setListAdapter(cursorAdapter); 
    } 

    private Cursor getAchievements(Context context) { 
     String selectQuery = "SELECT * FROM achievements ORDER BY id asc"; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     return db.rawQuery(selectQuery, null); 
    } 

    private class MyCursorAdapter extends CursorAdapter { 

     public MyCursorAdapter(Context context, Cursor c) { 
      super(context, c); 
     } 

     @Override 
     public void bindView(View v, Context context, Cursor cursor) { 
      if(cursor.getString(cursor.getColumnIndex("completed")).equals("yes"){ 
       TextView tv = (TextView) v.findViewById(R.id.NAMEOFTEXTVIEW); 
       tv.setTextColor(Color.GREEN); 
      } 
     } 

     @Override 
     public View newView(Context arg0, Cursor arg1, ViewGroup arg2) { 
      LayoutInflater inflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.achievement_item, parent, false); 
      return row; 
     } 
    } 
} 

가있는 경우 구문 오류를 수정, 그것을 시도하고 알려주십시오 나를 알고 아닙니다.

+0

이것을 구현 .... – scarhand

+0

내 대답을 업데이 트하십시오. – papaiatis

0

단지 그들이 서로 결합하고 있기 때문에 코드가 실행되지 않을 수 있습니다, 당신 SQLite는 코드에 대한 각 (") 전에 공간을 이처럼합니다.

난 아직 방법을 잘 모릅니다
String CREATE_ACHIEVEMENTS_TABLE = "CREATE TABLE achievements (" 
     + " id INTEGER PRIMARY KEY," 
     + " name VARCHAR," 
     + " type VARCHAR," 
     + " value VARCHAR," 
     + " completed VARCHAR" 
     + ")"; 
관련 문제