感谢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>
有人可以告诉我我要做些什么来使它有效,或者我的想法有什么问题?
答案 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(...)
}
依旧......