2014-11-25 53 views
0

我看了其他問題,但沒有一個滿足我需要的。onclick在列表視圖中的複選框

我有一個列表視圖顯示對象(警報)列表有一些textviews和複選框。您可以想象,此複選框用於激活和停用該警報。

當我到達這個屏幕(報警列表)時,它檢查數據庫中的活動狀態,所以一些複選框被選中而另一些不被選中。

我需要的是點擊複選框,並在此時更改數據庫中該警報的狀態。離開屏幕前不檢查所有複選框的狀態!!!我已閱讀使用selectedItems或Holder類的解決方案,但不適合我。

我想我需要在複選框(在AlarmAdapter中)中定義onClick事件,但警報列表在活動(ListAlarms)中,所以我不知道如何「告訴」警報列表「這是已被點擊的複選框(警報),然後更新其活動狀態」。

任何想法?也許控制行中的動作(使用OnItemClickListener)而不是點擊複選框?

非常感謝!

回答

0

最後,我已經做了不乾淨的解決方案:

此代碼在適配器:

CheckBox active = (CheckBox) view.findViewById(R.id.cb_active); 
    active.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
      a.toggle(); 
      boolean exists = false; 
      for(Alarm aux : modifiedAlarms){ 
       if(aux.getId() == a.getId()){ 
        exists = true; 
       } 
      } 
      if(!exists){ 
       modifiedAlarms.add(a); 
      } 
      else{ 
       //this is to guarantee that the alarm has the same state than the added one. 
       a.toggle(); 
       modifiedAlarms.remove(a); 
       a.toggle(); 
      } 
     } 
    }); 

    active.setTag(a); 

而這段代碼在活動中離開屏幕時:

ImageView back = (ImageView)findViewById(R.id.iv_back); 
    back.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      ArrayList<Alarm> modified = adapter.getModifiedAlarms(); 
      for(Alarm a : modified){ 
       dataalarms.activeAlarm(a.getId(), a.getActive()); 
      } 
      finish();    
     } 
    }); 

如果有人知道如何獲取活動中的onClick事件,那麼在此處回答將會很好。

謝謝! :)

0

這是自定義對象的來源。您創建這些對象的數組,然後您在適配器中的複選框的onClick事件中設置一個標誌。然後你可以訪問這個對象並檢查標誌。抱歉創建新的答案,但我的代表不夠高評論。