2013-07-29 167 views
0

我正在创建一个应用程序,其中有一个Listview。当我选择这个Listview的项目时,出现一个Alert dialog
在此警报对话框中,还有一个Listview。此列表视图中的项目取决于用户输入。
现在,当我在此列表视图中选择项目时,必须更改文本颜色,并且当我再次选择此项目时,文本颜色必须更改为其原始颜色。
应该做什么?在Android中更改Listview中选定项目的文本颜色

回答

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中,例如,在创建时:

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); 
     } 
    } 
}); 

请注意,我没有测试此代码,但它至少应该给你的你的代码应该是什么样子的想法。

+0

嘿,我已经执行你的saiid。但还没有结束。你可以在这里检查我的代码吗?并告诉我需要更换什么? –

+0

final HashMap selectionStates = new HashMap (); lvDialog.setOnItemClickListener(新OnItemClickListener(){ @Override 公共无效onItemClick(适配器视图为arg0,查看ARG1,INT ARG2,长ARG3){ \t \t \t \t \t \t \t \t \t布尔alreadySelected = FALSE; \t \t \t \t \t \t \t \t \t \t \t \t TextView tvChange =(TextView)arg1.findViewById(R.id.txt); \t \t \t \t \t \t \t \t如果(selectionStates.containsValue(ARG2)&& selectionStates.get(ARG2)) \t \t \t \t { \t \t \t \t \t tvChange.setTextColor(颜色。青色); \t \t \t \t} \t \t \t \t \t \t \t \t别的 \t \t \t \t { \t \t \t \t \t tvChange.setTextColor(Color.RED); \t \t \t \t} \t \t \t \t \t \t \t} \t \t}); –

+0

您使用哪种ListView适配器? –

相关问题