2013-08-01 36 views
0

我想從sqldatabase中的數組設置列表視圖行的背景顏色。 KEY_COLOR包含顏色列表。 幫助將不勝感激! 以下是主要活性的方法:從數據庫數組中設置列表視圖行的背景顏色

MainActivity:

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.notes_list); 
    mDbHelper = new NotesDbAdapter(this); 
    mDbHelper.open(); 
    fillData(); 
    registerForContextMenu(getListView()); 
} 

private void fillData() { 
    // Get all of the rows from the database and create the item list 
    mNotesCursor = mDbHelper.fetchAllNotes(); 
    startManagingCursor(mNotesCursor); 

    // Create an array to specify the fields we want to display in the list (only TITLE) 
    String[] from = new String[]{NotesDbAdapter.KEY_TITLE, NotesDbAdapter.KEY_BODY}; 

    // and an array of the fields we want to bind those fields to (in this case just text1) 
    int[] to = new int[]{R.id.text1, R.id.date}; 

    // Now create a simple cursor adapter and set it to display 
    SimpleCursorAdapter notes = 
      new SimpleCursorAdapter(this, R.layout.notes_row, mNotesCursor, from, to); 
    setListAdapter(notes); 
} 

這裏是數據庫適配器:

public class NotesDbAdapter { 

public static final String KEY_TITLE = "title"; 
public static final String KEY_BODY = "body"; 
public static final String KEY_ROWID = "_id"; 
public static final String KEY_COLOR = "color"; 

private static final String TAG = "NotesDbAdapter"; 
private DatabaseHelper mDbHelper; 
private SQLiteDatabase mDb; 

/** 
* Database creation sql statement 
*/ 
private static final String DATABASE_CREATE = 
    "create table notes (_id integer primary key autoincrement, " 
    + "title text not null, body text not null, color text not null);"; 

private static final String DATABASE_NAME = "data"; 
private static final String DATABASE_TABLE = "notes"; 
private static final int DATABASE_VERSION = 3; 

private final Context mCtx; 

private static class DatabaseHelper extends SQLiteOpenHelper { 

    DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     db.execSQL(DATABASE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
       + newVersion + ", which will destroy all old data"); 
     db.execSQL("DROP TABLE IF EXISTS notes"); 
     onCreate(db); 
    } 
} 

/** 
* Constructor - takes the context to allow the database to be 
* opened/created 
* 
* @param ctx the Context within which to work 
*/ 
public NotesDbAdapter(Context ctx) { 
    this.mCtx = ctx; 
} 

/** 
* Open the notes database. If it cannot be opened, try to create a new 
* instance of the database. If it cannot be created, throw an exception to 
* signal the failure 
* 
* @return this (self reference, allowing this to be chained in an 
*   initialization call) 
* @throws SQLException if the database could be neither opened or created 
*/ 
public NotesDbAdapter open() throws SQLException { 
    mDbHelper = new DatabaseHelper(mCtx); 
    mDb = mDbHelper.getWritableDatabase(); 
    return this; 
} 

public void close() { 
    mDbHelper.close(); 
} 


/** 
* Create a new note using the title and body provided. If the note is 
* successfully created return the new rowId for that note, otherwise return 
* a -1 to indicate failure. 
* 
* @param title the title of the note 
* @param body the body of the note 
* @return rowId or -1 if failed 
*/ 
public long createNote(String title, String body, String color) { 
    ContentValues initialValues = new ContentValues(); 
    initialValues.put(KEY_TITLE, title); 
    initialValues.put(KEY_BODY, body); 
    initialValues.put(KEY_COLOR, color); 

    return mDb.insert(DATABASE_TABLE, null, initialValues); 
} 

/** 
* Delete the note with the given rowId 
* 
* @param rowId id of note to delete 
* @return true if deleted, false otherwise 
*/ 
public boolean deleteNote(long rowId) { 

    return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; 
} 

/** 
* Return a Cursor over the list of all notes in the database 
* 
* @return Cursor over all notes 
*/ 
public Cursor fetchAllNotes() { 

    return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, 
      KEY_BODY, KEY_COLOR}, null, null, null, null, null); 
} 

/** 
* Return a Cursor positioned at the note that matches the given rowId 
* 
* @param rowId id of note to retrieve 
* @return Cursor positioned to matching note, if found 
* @throws SQLException if note could not be found/retrieved 
*/ 
public Cursor fetchNote(long rowId) throws SQLException { 

    Cursor mCursor = 

     mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, 
       KEY_TITLE, KEY_BODY, KEY_COLOR}, KEY_ROWID + "=" + rowId, null, 
       null, null, null, null); 
    if (mCursor != null) { 
     mCursor.moveToFirst(); 
    } 
    return mCursor; 

} 

/** 
* Update the note using the details provided. The note to be updated is 
* specified using the rowId, and it is altered to use the title and body 
* values passed in 
* 
* @param rowId id of note to update 
* @param title value to set note title to 
* @param body value to set note body to 
* @return true if the note was successfully updated, false otherwise 
*/ 
public boolean updateNote(long rowId, String title, String body, String color) { 
    ContentValues args = new ContentValues(); 
    args.put(KEY_TITLE, title); 
    args.put(KEY_BODY, body); 
    args.put(KEY_COLOR, color); 

    return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; 
} 

}`

回答

1

不能使用SimpleCursorAdapter此。編寫一個自定義的適配器,並在getView函數中通過setBackground爲該行設置視圖的顏色。或者你可以通過繼承SimpleCursorAdapter來實現,然後覆蓋getView,看起來像這樣:

view ret = super.getView(); 
ret.setBackground(color_you_want); 
return ret;