0

いくつListViewかの要素があり、データベース内のタイプに応じて行の背景を変更したいと思います。私が得たのはSimpleCursorAdapterインスタンスであり、それは関数adapter.setViewBinder(...)です。LinearLayoutしかし、行のにアクセスできないようです。コードは次のとおりです。

final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
            R.layout.day, c, new String[] { "name_con", "start", "end",
                    "type", "prof", "room" }, new int[] { R.id.subjectName,
                    R.id.subjectStart, R.id.subjectEnd, R.id.subjectType,
                    R.id.subjectProf, R.id.subjectRoom });

    adapter.setViewBinder(new ViewBinder() {
        @Override
        public boolean setViewValue(View view, Cursor cursor, int column) {
            switch (view.getId()) {
            case R.id.subjectName:
                final String colNameName = cursor.getString(1);
                ((TextView) view).setText(colNameName);

                return true;
            case R.id.subjectStart:
                final int colNameStart = cursor.getInt(2);

                Date dStart = new Date(colNameStart * 1000);
                SimpleDateFormat sdfStart = new SimpleDateFormat(
                        "HH:mm", Locale.getDefault());
                String startString = sdfStart.format(dStart);

                ((TextView) view).setText(startString);

                return true;
            case R.id.subjectEnd:
                final int colNameEnd = cursor.getInt(3);

                Date dEnd = new Date(colNameEnd * 1000);
                SimpleDateFormat sdfEnd = new SimpleDateFormat(
                        "HH:mm", Locale.getDefault());
                String EndString = sdfEnd.format(dEnd);

                ((TextView) view).setText(EndString);

                return true;
            case R.id.subjectType:
                final int colNameType = cursor.getInt(4);

                switch(colNameType){
                case 0:
                    ((TextView) view).setText(R.string.practice);
                    break;
                case 1:
                    ((TextView) view).setText(R.string.course);
                    break;
                case 2:
                    ((TextView) view).setText(R.string.practica);
                    break;
                case 3:
                    ((TextView) view).setText(R.string.seminar);
                }

                return true;
            case R.id.subjectProf:
                final String colNameProf = cursor.getString(5);
                ((TextView) view).setText(colNameProf);

                return true;
            case R.id.subjectRoom:
                final String colNameRoom = cursor.getString(6);
                ((TextView) view).setText(colNameRoom);

                return true;
            case R.id.dayCell:
                ((LinearLayout)view).setBackgroundColor(Color.WHITE);
            default:
                return false;
            }
        }
    });

    this.setListAdapter(adapter);
4

3 に答える 3

0

のbindViewをオーバーライドしますCursorAdapter

@Override
public void bindView(View view, Context context, Cursor cursor) {
    super.bindView(view, context, cursor);
    view.setBackgroundColor(color);
}
于 2011-05-06T13:41:33.150 に答える
0

ビューの背景を変更するには、setBackgroundColor(int color)、setBackgroundResource(int)、または setBackgroundResource(int resid) を呼び出すことができます。

BR、クリストファー

于 2011-05-06T13:33:43.367 に答える
0

次のようなことができるはずです。

switch (view.getId()) {
            case R.id.subjectName:
                final String colNameName = cursor.getString(1);
                ((TextView) view).setText(colNameName);
                ((LinearLayout)view.getParent()).setBackgroundResource(<resource id>);
                return true;

編集:効率のために、おそらくViewBinderパスの1つでのみ実行する必要があり、作成されたLinearLayoutであることを確認する必要があります。そうしないR.layout.dayと、ClassCast例外が発生します。

于 2011-05-06T13:36:04.510 に答える