我有一個Listview
(顯示在一個AlertDialog中),由兩列組成,用HashMap
(這裏有個想法)做出來。 每列是TextView
。它運作良好。如何設置Listview項目的第一列的顏色?
現在我想改變給定行的第一列的textcolor,但我不知道如何選擇和設置...我GOOGLE了幾個小時!任何線索?
這是我的代碼(lists
是SortedSet
):
public void showlistdesc() {
ListView listview = new ListView(this);
listview.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
listview.setSoundEffectsEnabled(true);
listview.setSelector(R.drawable.selector);
Integer i=0, pos = 0;
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map;
for (String l : lists) {
if (l.equals(currlist)) pos = i;
i++;
map = new HashMap<String, String>();
map.put("list", l);
map.put("desc", getlistdesc(l, false));
mylist.add(map);
}
listview.setAdapter(new SimpleAdapter(this, mylist, R.layout.lists_row,
new String[] {"list", "desc"}, new int[] {R.id.list1, R.id.desc1}));
AlertDialog.Builder builder = new AlertDialog.Builder(AveActivity.this)
.setView(listview)
.setIcon(R.drawable.ic_launcher)
.setTitle(lists.size() + " bird lists in databases");
final AlertDialog dial = builder.create();
//Scrolls the listview to this position at top
listview.setSelection(pos);
dial.show();
}
謝謝!
編輯
試過用下面的代碼擴展SimpleAdapter
,和所有我能看到的是純黑色行:
public class MySimpleAdapter extends SimpleAdapter {
private Context context;
public MySimpleAdapter(Context context,List<? extends Map<String, ?>> data,
int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.lists_row, null);
}
TextView list1 = ((TextView) v.findViewById(R.id.list1));
TextView desc1 = ((TextView) v.findViewById(R.id.desc1));
if (v.isPressed()) {
v.setBackgroundColor(context.getResources().getColor(R.color.pressed));
list1.setTypeface(null, 1);
list1.setTextColor(context.getResources().getColor(R.color.selected));
} else {
v.setBackgroundColor(context.getResources().getColor(R.color.black));
if (v.isSelected()) {
list1.setTypeface(null, 1);
list1.setTextColor(context.getResources().getColor(R.color.checked));
desc1.setTextColor(context.getResources().getColor(R.color.white));
} else {
list1.setTypeface(null, 0);
list1.setTextColor(context.getResources().getColor(R.color.normal));
desc1.setTextColor(context.getResources().getColor(R.color.lesswhite));
}
}
return v;
}
}
我明白了,這是我失敗的一個很好的理由。我不想要標題,我只是希望列表中的其中一個元素與用戶看起來不同。我甚至可以改變整行的背景或者文字顏色(我可以用一個簡單的適配器來做這件事嗎?)。我嘗試了所有我能想到的(選擇器等),但都失敗了。非常感謝! –
正如我在答案中所說的那樣,這是一個*特殊*要求,用SimpleAdapter不能實現。另外,我認爲僅僅因爲你想堅持'SimpleAdapter'就可以使用某種黑客技術。一個自定義適配器並不複雜**。 – neevek
是的,我明白你的答案。我會考慮並嘗試實施它。謝謝! –