如何在Separate ListAdapter中设置文本颜色?

时间:2011-12-31 00:09:07

标签: java android baseadapter

我正在使用Jeff Sharkey's SeparatedListAdapter,我想设置文字颜色,但我不确定如何。

为了给你一些关于他的适配器的背景知识,他将一个类似于简单Android列表的BaseAdapter子类化。所以,我尝试在这样的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 个答案:

答案 0 :(得分:1)

嗯。漂亮的适配器。

这里要注意的第一件事 - 以你正在做的方式修改View是最好留给你在各个部分适配器中使用的布局,即如果你想要黑色文本,使用项目布局有黑色文字。

无论如何要在代码中执行此操作,不应在子节适配器上重复调用#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;
}

答案 1 :(得分:0)

尝试在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);
}