2013-07-29 166 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適配器? –

相關問題