3

Android用の目覚まし時計アプリを開発しています。メイン画面にアラームのリストを表示したいと思います。この各行はListViewxmlファイルで定義されています。TextViewsそして、私は曜日ごとに別々にしたいです。たとえば、プログラムはsqlitedbをチェックインします。の値mondayは=1で、この色TextViewを赤に変更します。私はこのコードを書きましたが、それは機能しません。どうしたの?

private void fillData() {

    // Get all of the notes from the database and create the item list
    Cursor c = db.fetchAllAlarms();
    startManagingCursor(c);

    String[] from = new String[] { db.KEY_TIME, db.KEY_NAME };
    int[] to = new int[] { R.id.time, R.id.alarmName };

    // Now create an array adapter and set it to display using our row
    SimpleCursorAdapter alarms =
        new SimpleCursorAdapter(this, R.layout.alarm_row, c, from, to);
        alarms.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            int dayOfWeekIndex = cursor.getColumnIndex("mon");
            if (dayOfWeekIndex == columnIndex) {
                int color = cursor.getInt(dayOfWeekIndex);
                switch(color) {
                case 0: ((TextView) view).setTextColor(Color.RED); break;
                case 1: ((TextView) view).setTextColor(Color.GRAY); break;
                }
                return true;
            }
            return false;
        }
    });
4

2 に答える 2

7

Android のドキュメントからSimpleCursorAdapter.ViewBinder:

指定されたインデックスによって定義された Cursor 列を指定されたビューにバインドします。この ViewBinder によってバインディングが処理される場合、このメソッドは true を返す必要があります。このメソッドが false を返す場合、SimpleCursorAdapter はバインディングを独自に処理しようとします。

言い換えると、の実装setViewValueは、. 基本的に、ビューの色の設定を含め、内のデータで好きなことをするチャンスです。このようなことを試してみてください。ViewSimpleCursorAdapterViewListViewsetViewValueCursor

public boolean setViewValue(View view, Cursor cursor, int columnIndex){    
    // if this holds true, then you know that you are currently binding text to
    // the TextView with id "R.id.alarmName"
    if (view.getId() == R.id.alarmName) {
        final int dayOfWeekIndex = cursor.getColumnIndex("day_of_week");
        final int color = cursor.getInt(dayOfWeekIndex);

        switch(color) {
        case 0: ((TextView) view).setTextColor(Color.RED); break;
        case 1: /* ... */ break;
        case 2: /* ... */ break;
        /* etc. */
        }
        return true;
    }
    return false;
}

上記のコードは、 0 ~ 6 の値"day_of_week"を保持するint(特定の曜日を指定する) という名前の列を想定していることに注意してください。

于 2012-03-12T19:02:14.527 に答える
2

Android のドキュメントからSimpleCursorAdapter.ViewBinder:

指定されたインデックスによって定義された Cursor 列を指定されたビューにバインドします。この ViewBinder によってバインディングが処理される場合、このメソッドは true を返す必要があります。このメソッドが false を返す場合、SimpleCursorAdapter はバインディングを独自に処理しようとします。

言い換えると、の実装setViewValueは、. 実装は次のようになります。ViewSimpleCursorAdapterViewListView

notes.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
        int dayOfWeekIndex = cursor.getColumnIndex("day_of_week");
        if (dayOfWeekIndex == columnIndex) {
            int color = cursor.getInt(dayOfWeekIndex);
            switch(color) {
            case 0: ((TextView) view).setTextColor(Color.RED); break;
            case 1: /* ... */ break;
            case 2: /* ... */ break;
            /* etc. */
            }
            return true;
        }
        return false;
    }
});

上記のコードは、 0 ~ 6 の値"day_of_week"を保持するint(特定の曜日を指定する) という名前の列を想定していることに注意してください。

于 2012-03-12T01:42:06.093 に答える