java基于数据更改listview项的文本颜色
我正在尝试从MySQL将项目数组加载到listview中。根据数据,如果“no_sms_service”=1,那么我只想更改该项目的背景色。我已尝试覆盖视图,但它没有具体更改项目。它会更改所有项目。我做错了什么
public void loadReservations() {
ListView lv = (ListView) this.findViewById(R.id.waitingList);
String url = "jdbc:mysql://"+dbURL+":"+dbPort+"/"+dbDatabase+"";
String user = dbUser;
String pass = dbPass;
List<String> waitingList = new ArrayList<String>();
try {
StrictMode.ThreadPolicy policy =
new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(url, user, pass);
Statement st = con.createStatement();
final ResultSet rs = st.executeQuery("SELECT cust_name, reserve_Date, Seat_prefer, reserve_people, Notes, no_sms_service FROM seat_reserve WHERE reserve_Close=0 && DATE(reserve_Date) = DATE(NOW()) ORDER BY reserve_Date ASC");
ResultSetMetaData rsmd = rs.getMetaData();
String result;
while (rs.next()) {
String myTimestamp = rs.getTimestamp(2).toString();
DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S");
Date date = inputFormat.parse(myTimestamp);
DateFormat outputFormat = new SimpleDateFormat("hh:mm a");
String outputString = outputFormat.format(date);
result = "\n" +"Name: " + rs.getString(1)
+ "\n" + "Reservation Time: " + outputString
+ "\n" + "Preferred Area: " + rs.getString(3)
+ "\n" + "Guests: " + rs.getString(4)
+ "\n" + "Notes: " + rs.getString(5) + "\n";
waitingList.add(result);
noSMS = rs.getInt(6);
arrayAdapter =
new ArrayAdapter<String>(getApplicationContext(),
安卓.R.layout.simple_list_item_1,
waitingList) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text = (TextView) view.findViewById(安卓.R.id.text1);
if (noSMS == 1)
{
text.setTextColor(Color.RED);
}
return view;
}
};
}
lv.setAdapter(arrayAdapter);
}
catch(Exception e)
{
e.printStackTrace();
}
}
# 1 楼答案
您提供的代码存在多个问题
首先,当使用
getView
构造视图时,它不会评估作为数据传递的result
字符串的内容。由于ResultSet
是一个临时数据容器,因此需要为正在提取的数据提供一个更持久的存储解决方案,以便在ListView
需要更新时对其进行评估。创建以下类:您还将为列表中的每个元素创建一个新的ArrayAdapter。这不是
ArrayAdapter
的工作原理!一个ListView
只能有一个的ArrayAdapter
,它的逻辑通过它的getView
方法在列表中的每个项目上运行以下内容应该放在
loadReservations
的之外,可能在onCreate
中:既然初始化的繁重工作已经在
ListItemData
的构造函数中完成,我们的loadReservations
函数就可以大大简化了:请记住,我还没有编译这段代码,如果你发现任何问题,请告诉我,我会更新答案