我正在创建一个应用程序,其中有一个Listview
. 当我选择这个项目时Listview
,会Alert dialog
出现一个。
在此警报对话框中,还有一个Listview
. 此列表视图中的项目取决于用户输入。
现在,当我在此列表视图中选择项目时,必须更改文本颜色,当我再次选择此项目时,文本颜色必须更改为其原始颜色。
应该做什么?
问问题
2485 次
1 回答
0
将地图添加到您的班级以跟踪您选择的项目:
HashMap <Integer, Boolean> selectionStates = new HashMap <String, Boolean>();
为您的 ListView 使用自定义适配器。在 getView 中,根据地图中的值设置颜色:
if (selectionStates.contains(position) && selectionStates.get(position){
yourTextView.setTextColor(selectedColor);
}
else {
yourTextView.setTextColor(normalColor);
}
将 onItemClickListener 添加到您的 ListView,例如在 onCreate 中:
yourListView.setOnItemClickListener(){
public void onItemClick (AdapterView<?> parent, View view, int position, long id){
boolean alreadySelected = false;
if (selectionStates.contains(position) && selectionStates.get(position) alreadySelected = true;
selectionStates.put(position, !alreadySelected);
TextView yourTextView = (TextView) view.findViewById(R.id.yourItemTextView);
if (selectionStates.contains(position) && selectionStates.get(position){
yourTextView.setTextColor(selectedColor);
}
else {
yourTextView.setTextColor(normalColor);
}
}
};
这不仅会在项目被选中后立即改变它的颜色,而且在滚动后也会保留颜色。
作为适配器,您可以扩展 ArrayAdapter:
yourListView.setAdapter(new ArrayAdapter<WhatEverClass>(ArgumentsHere){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView yourTextView = (TextView) view.findViewById(R.id.yourItemTextView);
if (selectionStates.contains(position) && selectionStates.get(position){
yourTextView.setTextColor(selectedColor);
}
else {
yourTextView.setTextColor(normalColor);
}
}
});
请注意,我没有测试此代码,但它至少应该让您了解您的代码应该是什么样子。
于 2013-07-29T10:16:10.500 回答