Как мои элементы ListView могут иметь (и поддерживать) разные фоны? - PullRequest
2 голосов
/ 05 июля 2011

Я достиг чего-то похожего для определенных элементов в моем ListView в этом вопросе.

Однако теперь я хочу, чтобы пользователь мог нажимать на элементы, что будетпо существу, выделите любой элемент, который коснулся пользователь.Я храню список постучавших элементов в своем приложении и должен иметь возможность ссылаться на это из ViewBinder, когда происходит прокрутка, так как я никогда не адаптирую что-либо к LinearLayout, который составляет сам ListView,Я не уверен, как получить объект LinearLayout, чтобы правильно установить его цвет фона.

Мне нужно это сделать, потому что, как вы знаете, при прокрутке Android повторно используетэлементы списка, что хорошо, если вы не меняете форматирование (окраску и т. д.) отдельных элементов списка.В этом случае вы получите элементы списка, которые окрашены / отформатированы неправильно.Я использую ViewBinder для решения проблемы, когда дело доходит до TextViews в элементах моего списка, но не знаю, как сделать что-то подобное для фона самого ListView.

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Создайте собственный макет строки, например, custom_row.xml, и расположите все необходимые представления так же, как в обычном макете для деятельности (поэтому в этом случае вы, вероятно, предоставите текстовое представление для текста и, возможно, значокслева от него).

Затем создайте пользовательский адаптер, расширив существующий адаптер, и переопределите метод getView как таковой.Вот пример, в котором используется макет custom_row с заголовком и подзаголовком:

class CustomAdapter<T> extends ArrayAdapter<T> {

/** List item title */
protected TextView mTitle;
/** List item subtitle */
protected TextView mSubtitle;

/**
 * @param context
 *            Current context
 * @param items
 *            Items being added to the adapter
 */
public CustomAdapter(final Context context, final List<T> items) {
    super(context, R.layout.custom_row, items);
}

/** Construct row */
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
    View view = convertView;
    if (view == null) {
        final LayoutInflater li = (LayoutInflater) getContext().getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
        view = li.inflate(R.layout.custom_row, null);
    }
    mTitle = (TextView) view.findViewById(R.id.custom_row_title);
    mSubtitle = (TextView) view.findViewById(R.id.custom_row_subtitle);
    return view;
}
}

Как показано, вы можете получить элементы, указанные в макете custom_row, который вы создали с помощью службы inflater.Затем вы можете манипулировать объектами по мере необходимости.

0 голосов
/ 05 июля 2011

Я считаю, что одним из способов является использование списка состояний , где состояние по умолчанию имеет прозрачный фон, а выбранное состояние имеет желаемый фон.

Например, см. Romain Guy'sответ здесь: Изменение цвета фона элементов ListView на Android

См. также: В списке состояний Android ListView не отображается фон элемента по умолчанию

...