2015-06-08 79 views
0

在我的鬧鐘應用程序中: 主要活動包含具有文本視圖和切換按鈕的列表視圖,我已應用到選中的更改監聽器上。每當我打開或關閉一個鬧鐘時,它會顯示一條消息「鬧鐘已打開」或「鬧鐘已關閉」。但是,當我向下滾動,然後向上滾動同樣的消息再次出現。如果我繼續向下滾動,然後再一次顯示消息。看起來,在滾動時一次又一次執行選中的更改偵聽器中的代碼。請告訴我如何解決這個問題。我不想在滾動時一次又一次地在選中的更改監聽器中執行代碼。listview with switch and on checked change listener issue

+0

發佈您的適配器的getView方法。 – Kartheek

+0

雖然你想改變它,當你的開關狀態改變? –

回答

0

請勿使用checked change listener。嘗試讓交換機的onclicklistener,並把支票這樣

yourswitch.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     yourswitch.setChecked(!yourswitch.getChecked()); 
     // update your data model if needed. 
    } 
}); 

你都面臨這個問題,因爲當您滾動列表時perticular視圖進入存儲它嘗試檢查或在你的數據模型的基礎上取消交換機結果checkedChange listener一次又一次地被調用。

對於SwitchDrag案例。

view.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent event) 
     { 
      switch (event.getAction()) 
      { 
       case MotionEvent.ACTION_MOVE: 

        break; 

       case MotionEvent.ACTION_UP: 
        yourswitch.setChecked(!yourswitch.getChecked()); 
        // update your data model if needed. 
        break; 

       case MotionEvent.ACTION_DOWN: 

        break; 
      } 

      return true; 
     } 
    }); 

嘗試實施onTouchLisrtener。當用戶拖動開關並拿起他的手指時,我相信case MotionEvent.ACTION_UP會被調用。

+0

是的,我使用點擊監聽器,但onClick不會觸發當用戶拖動開關拇指。我怎樣才能做到這一點? –

+0

Plz很快回復。 –

+0

我有一個調整這leme更新我的答案相應。 – Nitesh