1

我正在使用Jeff Sharkey 的分离列表适配器,我想设置文本颜色,但我不确定如何设置。

为了让您了解他的适配器的背景知识,他将 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;
}

但是发生的情况是它为第一个单元格设置了文本颜色,但没有为其余单元格设置它。

有任何想法吗?

4

2 回答 2

1

嗯。漂亮的适配器。

这里要注意的第一件事 -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;
}
于 2012-01-05T09:53:06.147 回答
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);
}
于 2012-01-05T10:10:02.043 回答