我使用此代码填充列表视图
public class FillList extends AsyncTask<String, String, String> {
List<Map<String, String>> prolist = new ArrayList<Map<String, String>>();
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(String r) {
String[] from = {"D", "C", "B","A"};
int[] views = { R.id.lblPrice,R.id.lblAmount,R.id.lblDescription,R.id.lblDate};
final SimpleAdapter ADA = new SimpleAdapter(Products.this,
prolist, R.layout.lsttemplate, from,
views);
listview.setAdapter(ADA);
}
@Override
protected String doInBackground(String... params) {
Map<String, String> datanum = new HashMap<String, String>();
datanum.put("D", "price");
datanum.put("C", "amount");
datanum.put("B", "description");
datanum.put("A", "date");
prolist.add(datanum);
while (rs.next()) {
datanum = new HashMap<String, String>();
datanum.put("D", rs.getString("Bes"));
datanum.put("C", rs.getString("Bed"));
datanum.put("B", rs.getString("Sharh"));
datanum.put("A", rs.getString("Date"));
prolist.add(datanum);
}
}
}
我使用此代码
更改第一行ListView
的背景颜色
listview.getChildAt(0).setBackgroundColor(Color.parseColor("#7092bf"));
现在一切正常,第一行改变了背景颜色
但是,
当我向下滚动ListView
时,ListView
的其他一行也改变了背景颜色。
我只想更改ListView
的第一行。
如果我想更改最后一行的背景颜色,我该怎么办?
答案 0 :(得分:2)
我建议您继承SimpleAdapter并覆盖getView方法:
public class MySimpleAdapter extends SimpleAdapter {
public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if (position == 0) {
// set special background for first view
view.setBackgroundColor(...);
} else if (position == getCount() - 1) {
// set special background on last view
view.setBackgroundColor(...);
} else {
// set normal background on other views
view.setBackgroundColor(...);
}
return view;
}
}
这实现了什么:这是ListView调用的方法,用于决定在给定位置的特定项目在屏幕上显示的视图。您现在可以访问该视图,因此您应该在此处进行修改。
请记住还要将背景设置为正常 - 当屏幕的视图滚动时,它将被回收,这意味着它可以在以后用于在列表中显示不同的项目,这可能会或可能会不是第一个。
使用新适配器:
final MySimpleAdapter ADA = new MySimpleAdapter(Products.this,
prolist, R.layout.lsttemplate, from,
views);
listview.setAdapter(ADA);
答案 1 :(得分:0)
这是为了节省内存。 Android操作系统将不在屏幕上的视图发送到堆或缓存中的其他位置。因此,滚动时索引0处的视图会发生变化。
要解决此问题,请为第一个列表视图添加标签,并使用标签更改背景颜色。 findViewWithTagTraversal会帮助你