2017-04-02 24 views
-2

我有一個開關。它的工作原理是這樣 1.打開它會顯示AlertDialog與Download/locate/cancel選項來執行(download)/(locate locally)/(cancel the dialog)我們如何區分開關設置的狀態改變和用戶設置的?

2.開啓它關閉顯示你AlertDialog與Yes/No選擇要刪除的文件

現在假設最初的開關狀態OFF。現在,如果我將其轉爲ON,Listener將將OnChecked註冊爲true。接下來,如果我按取消對話框,On​​Checked將被設置爲false,因爲沒有找到/下載文件。即使以編程方式設置,偵聽器也會檢測到此更改。我需要一種方式來劃分由用戶和程序引起的Switch狀態更改。

我的監聽器是OnCheckedChangeListener。

我知道有類似的問題在線解決或者是臨時或不完整的。

編輯:我編輯並更改了問題的完整結構以解決我的根目標。這不應該成爲一個問題,因爲編輯時沒有答案。

+0

你最小的目標是什麼? – Opiatefuchs

+0

minSdkVersion 19 targetSdkVersion 25.但是,這是如何與自定義開關和通貨膨脹錯誤 –

+0

我問,因爲它被添加到API14 ... – Opiatefuchs

回答

0

這個問題有幾個在線答案。它們包括編寫擴展SwitchCompat,CompundButton等的自定義開關;採用SilentlySetChecked方法。

如果我們實現OnClickListener而不是OnCheckedChangeListener,那麼不會有任何警報對話框問題的遞歸。但是我們無法檢測到此偵聽器中的滑動更改。

簡單地說,我們需要檢測不遞歸問題通過點擊/刷卡完成的狀態變化:

CompoundButton.OnCheckedChangeListener downloadButtonListener = new CompoundButton.OnCheckedChangeListener() { 
 
@Override 
 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
 
if (holder.downloadSwitch.isPressed() & isChecked) { 
 
//if switch is turned on by click/swipe 
 
} 
 
else if(holder.downloadSwitch.isPressed() & !isChecked{ 
 
//if switch is turned on by click/swipe 
 
} 
 
} 
 
});

這是一個很簡單的解決方案,解決了這個問題。但是,它從來沒有出現在搜索,除了部分here。讓我知道是否有更好的解決方案,我錯過了。

注意:我發佈這個解決方案,因爲它也回答了編輯的問題。在接受我自己的解決方案之前,我會等待幾天以獲得更好的答案。