Могу ли я изменить фон LinearLayout из строки ListView в ViewBinder? - PullRequest
0 голосов
/ 06 мая 2011

У меня есть 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);

Ответы [ 3 ]

0 голосов
/ 06 мая 2011

Вы должны быть в состоянии сделать что-то вроде:

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 проходов, и вам нужно быть уверенным, что это LinearLayout, созданный в R.layout.day, или вы получите исключение ClassCast.

0 голосов
/ 06 мая 2011

Переопределить bindView в вашем CursorAdapter

@Override
public void bindView(View view, Context context, Cursor cursor) {
    super.bindView(view, context, cursor);
    view.setBackgroundColor(color);
}
0 голосов
/ 06 мая 2011

Вы можете вызвать setBackgroundColor (int color), setBackgroundResource (int) или setBackgroundResource (int остаток), чтобы изменить фон вашего представления.

BR, Кристоффер

...