2012-02-01 145 views
2

我有列表視圖名稱和數字和複選框填充與SimpleAdapter的聯繫人,並在項目上單擊我監聽事件和更改項目的顏色,我也想更改複選框啓用和用戶再次單擊同一項目後我想取消選擇該項目。 我該怎麼做? 謝謝沃爾夫。取消選擇查看視頻項目?

這是我的代碼,我可以成功地改變顏色,但我現在該怎麼改變複選框狀態爲特定項目和比第二擊再次更改狀態並不:

lImenik.setOnItemClickListener(new OnItemClickListener() { 

    public void onItemClick(AdapterView<?> adapter, View view, int position, long id) { 
     // TODO Auto-generated method stub 
     Object obj = lImenik.getItemAtPosition(position); 
     String tmp = obj.toString(); 
     view.setBackgroundColor(Color.GRAY); 

     for(int i = 0; i < adapter.getChildCount(); i++){ 
     if(i == position){ 
     if(position != prePos){ 

      adapter.getChildAt(i).setBackgroundColor(Color.GRAY);        
      prePos = position;        
      } else { 
      adapter.getChildAt(i).setBackgroundColor(0x191919); 
      prePos = -1; 
      }       
     }      
     }     
    } 
    }); 
} 

回答

2

的方法

public void onItemClick(AdapterView<?> adapter, View view, 
        int position, long id) 

爲您提供了您點擊過的行的視圖。所有你需要做的是在該視圖中標記或取消選中該複選框。你可以做到這一點的

public void onItemClick(AdapterView<?> adapter, View view, 
       int position, long id) { 
      // TODO Auto-generated method stub 
      Object obj = lImenik.getItemAtPosition(position); 
      CheckBox checkbox = (CheckBox) view.findViewById (R.id.your_checkedbox_id); 
      checkbox.setChecked (!checkbox.isChecked()) ; 

但是你應該有數組,或者你的對象一個布爾值,以便在年底就可以知道哪些對象標記爲被檢查的,哪些不是

+0

它的工作,但只爲列表中的第一項,這是爲什麼? 當我點擊第二項時,第一個複選框會再次改變狀態。 – Wolf87 2012-02-01 21:15:46

+0

這是因爲舊的觀點,當重繪然後不保存陳述。你必須保存你的數據的狀態,所以...... 請用你的list.size()的長度來取一個布爾數組。將每個項目標記爲false。在你ListAdapter的getView()方法中。從視圖中提取複選框將其標記爲setChecked(array [position]);這樣它可以將布爾狀態與數組列表同步。 =然後在listView的onItemClick()中設置array [position] =!array [position];然後checkbox.setChecked(array [position]);嘗試這個。並且您還將獲得舊視圖的檢查數據保存 – Arslan 2012-02-01 21:22:08

相關問題