Как мне установить цвет текста в SeparatedListAdapter? - PullRequest
1 голос
/ 31 декабря 2011

Я использую Джефф Шарки SeparatedListAdapter , и я хотел бы установить цвет текста, но я не уверен, как.

Чтобы дать вам некоторое представление о своем адаптере, он подклассировал BaseAdapter, похожий на простой список Android. Итак, я попытался установить цвет текста в методе getView() следующим образом (вы можете увидеть мою попытку между комментариями):

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    int sectionnum = 0;
    for(Object section : this.sections.keySet()) {
        Adapter adapter = sections.get(section);
        int size = adapter.getCount() + 1;



        // check if position inside this section
        if(position == 0) return headers.getView(sectionnum, convertView, parent);
        if(position < size)
        {
            /***** I added this section to try to set the text color ***/

            TextView captionTV = (TextView)adapter.getView(position, convertView, parent).findViewById(R.id.list_complex_caption);
            captionTV.setTextColor(R.color.black;);

            TextView titleTV = (TextView)adapter.getView(position, convertView, parent).findViewById(R.id.list_complex_title);
            titleTV.setTextColor(R.color.black;);

            /***** end add *****/               

            return adapter.getView(position - 1, convertView, parent);
        }

        // otherwise jump into next section
        position -= size;
        sectionnum++;
    }
    return null;
}

Но происходит то, что он устанавливает цвет текста для первой ячейки, но не устанавливает его для остальных.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 05 января 2012

Hm. Отличный адаптер.

Первое, что здесь следует отметить - изменение View s в том, как вы делаете, лучше всего оставить для макетов, которые вы используете в различных адаптерах разделов, т.е. если вы хотите черный текст, используйте макет элемента, который имеет черный текст.

В любом случае, чтобы сделать это в коде, не следует повторно вызывать #getView(int, View, ViewGroup) на адаптерах подразделов, вместо этого сделайте так:

/**
 * {@inheritDoc}
 */
public View getView(int position, View convertView, ViewGroup parent) {
    int sectionnum = 0;
    for(Object section : this.sections.keySet()) {
        Adapter adapter = sections.get(section);
        int size = adapter.getCount() + 1;

        // check if position inside this section
        if(position == 0) return headers.getView(sectionnum, convertView, parent);
        if(position < size){
            View view = adapter.getView(position - 1, convertView, parent);
            TextView captionTV = (TextView) view.findViewById(R.id.list_complex_caption);
            captionTV.setTextColor(R.color.black);
            TextView titleTV = (TextView) view.findViewById(R.id.list_complex_title);
            titleTV.setTextColor(R.color.black);
            return view;
        }

        // otherwise jump into next section
        position -= size;
        sectionnum++;
    }
    return null;
}
0 голосов
/ 05 января 2012

Попробуйте сделать это в bindView переопределить функцию bindView , например

@Override
public void bindView(View v, Context context, Cursor c) {

    String name = c.getString(nameCol);

    TextView captionTV = (TextView) v.findViewById(R.id.list_complex_caption);
    captionTV.setTextColor(R.color.black);
}
...