Android: 如何更改列表视图中列表项的背景颜色,由 SimpleCursorAdapter 管理
Android: how to change the background colors of listitems in a listview, managed by SimpleCursorAdapter
您好,我是 Android 的新手,我想知道如何在遍历列表视图时更改列表项的背景颜色。我查看了 Whosebug 4 天,但没有找到适合我的案例的任何解决方案。
所以这是我的代码:
public class ExercisesActivity extends ListActivity implements AdapterView.OnItemClickListener {
private static final String TAG="ExerciseActivity";
private static final int REQ_ADD_EXERCISE =1;
private static final int REQ_RENAME_EXERCISE=2;
private String exercise;
private long itemId;
SimpleCursorAdapter adapter;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exercises);
lv=getListView();
lv.setOnItemClickListener(this);
Cursor cursor = getContentResolver().query(Exercise.CONTENT_URI, new String[]{Exercise.Columns._ID, Exercise.Columns.EXERCISE_NAME, Exercise.Columns.DONE_LAST},
"",null, Exercise.Columns.DONE_LAST);
adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,cursor,
new String[] { Exercise.Columns.EXERCISE_NAME, Exercise.Columns.DONE_LAST},
new int[]{ android.R.id.text1, android.R.id.text2},1);
this.setListAdapter(adapter);
}
@Override
protected void onResume() {
this.setBackgroundColors();
super.onResume();
}
这是我的 setBackgroundColors 方法:
public void setBackgroundColors(){
View listItem;
TextView tv;
for (int i =0;i<lv.getCount();i++){
//listItem=lv.getChildAt(i); --> doesnt work
listItem=lv.getAdapter().getView(i,null,lv);
tv = (TextView) listItem.findViewById(android.R.id.text2);
String color =calculateColor(tv.getText().toString());
Log.d(TAG,color);
if(color.equals("green")){
listItem.setBackgroundColor(getResources().getColor(R.color.green));
}else if(color.equals("yellow")){
listItem.setBackgroundColor(getResources().getColor(R.color.yellow));
}else if (color.equals("red")){
listItem.setBackgroundColor(getResources().getColor(R.color.red));
}
}
}
代码看起来很适合我。 "calculateColor" returns 一个有效的字符串值(绿色、黄色、红色)。我在 colors.xml 中创建了这些资源颜色。调试时没有错误,代码是 运行 但是列表项没有改变它们的主题颜色。也许主题颜色总是覆盖以编程方式设置的颜色?我是否必须以这种方式进行调整?
非常感谢您的帮助!!! :)
试试这个代码示例
private int[] colors = new int[] { 0xAA1A4C80, 0xAA5F82A6 };
adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,cursor,
new String[] { Exercise.Columns.EXERCISE_NAME, Exercise.Columns.DONE_LAST},
new int[]{ android.R.id.text1, android.R.id.text2},1){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text = (TextView) view.findViewById(android.R.id.text1);
text.setTextColor(Color.WHITE);
int colorPos = position % colors.length;
text.setBackgroundColor(colors[colorPos]);
return view;
}
};
您好,我是 Android 的新手,我想知道如何在遍历列表视图时更改列表项的背景颜色。我查看了 Whosebug 4 天,但没有找到适合我的案例的任何解决方案。
所以这是我的代码:
public class ExercisesActivity extends ListActivity implements AdapterView.OnItemClickListener {
private static final String TAG="ExerciseActivity";
private static final int REQ_ADD_EXERCISE =1;
private static final int REQ_RENAME_EXERCISE=2;
private String exercise;
private long itemId;
SimpleCursorAdapter adapter;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exercises);
lv=getListView();
lv.setOnItemClickListener(this);
Cursor cursor = getContentResolver().query(Exercise.CONTENT_URI, new String[]{Exercise.Columns._ID, Exercise.Columns.EXERCISE_NAME, Exercise.Columns.DONE_LAST},
"",null, Exercise.Columns.DONE_LAST);
adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,cursor,
new String[] { Exercise.Columns.EXERCISE_NAME, Exercise.Columns.DONE_LAST},
new int[]{ android.R.id.text1, android.R.id.text2},1);
this.setListAdapter(adapter);
}
@Override
protected void onResume() {
this.setBackgroundColors();
super.onResume();
}
这是我的 setBackgroundColors 方法:
public void setBackgroundColors(){
View listItem;
TextView tv;
for (int i =0;i<lv.getCount();i++){
//listItem=lv.getChildAt(i); --> doesnt work
listItem=lv.getAdapter().getView(i,null,lv);
tv = (TextView) listItem.findViewById(android.R.id.text2);
String color =calculateColor(tv.getText().toString());
Log.d(TAG,color);
if(color.equals("green")){
listItem.setBackgroundColor(getResources().getColor(R.color.green));
}else if(color.equals("yellow")){
listItem.setBackgroundColor(getResources().getColor(R.color.yellow));
}else if (color.equals("red")){
listItem.setBackgroundColor(getResources().getColor(R.color.red));
}
}
}
代码看起来很适合我。 "calculateColor" returns 一个有效的字符串值(绿色、黄色、红色)。我在 colors.xml 中创建了这些资源颜色。调试时没有错误,代码是 运行 但是列表项没有改变它们的主题颜色。也许主题颜色总是覆盖以编程方式设置的颜色?我是否必须以这种方式进行调整?
非常感谢您的帮助!!! :)
试试这个代码示例
private int[] colors = new int[] { 0xAA1A4C80, 0xAA5F82A6 };
adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,cursor,
new String[] { Exercise.Columns.EXERCISE_NAME, Exercise.Columns.DONE_LAST},
new int[]{ android.R.id.text1, android.R.id.text2},1){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text = (TextView) view.findViewById(android.R.id.text1);
text.setTextColor(Color.WHITE);
int colorPos = position % colors.length;
text.setBackgroundColor(colors[colorPos]);
return view;
}
};