我知道如何从sqlite数据库中获取数据并将其显示在listview中。但我想知道如何根据从数据库中获取的数据(如颜色,文本等)更改按钮的属性。 我搜索了很多,但找不到任何相关的答案。 我们只能在列表视图中显示来自数据库的数据吗?
更新:我修改了我的代码,以便在列表视图中显示数据,如下所示:
public class TextAdapter extends BaseAdapter {
public ArrayList<Integer> arr_Id = new ArrayList<Integer>();
public ArrayList<String> arr_Name = new ArrayList<String>();
public ArrayList<String> arr_Status = new ArrayList<String>();
public ArrayList<String> arr_Color = new ArrayList<String>();
public int i = 0;
private Context mContext;
public TextAdapter(Context c,ArrayList<String> array_Name, ArrayList<String> array_Status, ArrayList<String> array_Color) {
mContext = c;
arr_Name = array_Name;
arr_Status = array_Status;
arr_Color = array_Color;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return arr_Name.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
String status;
TextView mTextView;
if (convertView == null) {
mTextView = new TextView(mContext);
}
else {
mTextView = (TextView)convertView;
}
mTextView.setText(arr_Name.get(position) +" "+ arr_Status.get(position) );
position = 0;
while (position < arr_Status.size()) {
status = arr_Status.get(position);
if (status.equals("Finnished")) {
mTextView.setBackgroundResource(color.holo_green_dark);
}
if (status.equals("Running")) {
mTextView.setBackgroundResource(color.holo_orange_dark);
}
if (status.equals("Stopped")) {
mTextView.setBackgroundResource(color.holo_red_dark);
}
position = position + 1;
// status = null;
}
return mTextView;
}
}
输出是:获取的数据显示在列表视图中。每行都有进程名称及其状态(运行,完成和停止)。 现在我希望对于完成过程,行的颜色为绿色,对于Stopped为红色,橙色为运行一个。这里第1行和第3行的颜色不是必需的。 注意:每一行都是红色的。
请帮忙。
答案 0 :(得分:0)
这不起作用的原因是因为你在一个方法中循环遍历所有项目。
对于ListView的每一行执行getView()
方法一次,这意味着您应该只查看一个状态。
请注意,当您设置状态文字时,您需要查看给定位置的状态。你也需要为颜色做这件事。尝试将行更改为以下内容:
String status = arr_Status.get(position);
mTextView.setText(arr_Name.get(position) + " " + status;
if(status.equals("Finished"){
mTextView.setBackgroundResource(color.holo_green_dark);
} else if(status.equals("Running"){
mTextView.setBackgroundResource(color.holo_orange_dark);
} else{ // Stopped
mTextView.setBackgroundResource(color.holo_red_dark);
}
position
参数表示您正在显示的行,因此无需像这样循环遍历每一行。
出于这个原因,我认为最后一个位置的状态为已停止,这就是为什么每一行都是红色的原因,因为在每行中你都要通过列表,状态颜色为列表中的最后一项设置。