如何设置特定的一个ListView行的文本/图像 - Android?

时间:2012-07-17 13:03:53

标签: java android listview android-listview

感谢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);一切正常,只有这一行被改变了。< / p>

有人可以告诉我我要做些什么来使它有效,或者我的想法有什么问题?

2 个答案:

答案 0 :(得分: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中的视图具有已回收的颜色和文本。您需要为每个更改不同listview项的bindView调用显式分配所有属性。在这种情况下,backgroundcolor和price标签。

答案 1 :(得分:0)

覆盖getView方法,并根据listview项的位置使用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(...)
 }

依旧......