0

感谢 stackoverflow 用户的帮助,我设法根据某些条件更改了一个特定行的颜色。但是改变颜色并不完全符合我的需求和期望。

所以我开始浏览网页并试图改变它。我想在特定行的 TextView 中设置文本。为了能够更改行颜色,我被建议创建个性化的 SimpleCursorAdapter 类,因为我正在使用 Cursor 从 SQLite 将值输入 ListView。

在阅读和测试之后,这是我想出的:

public class MyCursorAdapter extends SimpleCursorAdapter {
    public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        super.bindView(view, context, cursor);
        if(cursor.getLong(cursor.getColumnIndex(MyDBAdapter.KEY_PRICE)) == 5)
        {   
            TextView price = (TextView)view.findViewById(R.id.priceInfo);
            price.setText("High");
        }
        else
            view.setBackgroundColor(0x00000000);
    }
}

但是,我现在得到的是某些行上的重复文本(其中有规律性)。当我在某处读到时,每次滚动都在刷新 ListView,但是当我放入 if 子句(插入此 TextView)时,这行怎么可能:view.setBackgroundColor(SELECTED_COLOR);一切正常,只有这一行已更改。

有人可以告诉我我必须做什么才能使它起作用,或者我的想法有什么问题吗?

4

2 回答 2

1
public class MyCursorAdapter extends SimpleCursorAdapter {
    public MyCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        super.bindView(view, context, cursor);         
        TextView price = (TextView)view.findViewById(R.id.priceInfo);
        if(cursor.getLong(cursor.getColumnIndex(MyDBAdapter.KEY_PRICE)) == 5)
        {   
            price.setText("High");
            view.setBackgroundColor(/* red color? */);
        }
        else {
            price.setText("");
            view.setBackgroundColor(0x00000000);
        }
    }
}

由于“itemrecycling”,bindView 中的视图具有被回收的颜色和文本。您需要为更改不同列表视图项的每个 bindView 调用显式分配所有属性。在这种情况下,背景颜色和价格标签。

于 2012-07-20T05:56:53.570 回答
0

覆盖 getView 方法并根据列表视图项的位置使用 convertView.setbackgroundColor。

像这样的东西:

public class MyCustomAdapter extends ArrayAdapter<String> {

public MyCustomAdapter(Context context, int textViewResourceId,
String[] objects) {
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return super.getView(position, convertView, parent);
if(postion == 1) //1st position in listview
 {
   convertView.setbackgroundColor(...)
 }

等等...

于 2012-07-17T13:10:22.370 回答