我在我的應用程序中使用了CompoundButton
。我在CompoundButton.OnCheckedChangeListener
的onCheckedChange()
回調中調用名爲newsLetterUpdate()
的方法。我以編程方式更改了此CompoundButton
的選中狀態,但onCheckedChange()
回調被調用。我希望只有在View
上切換選中狀態時纔會觸發onCheckedChange()
。 請給我一個解決方案,以改變複合按鈕的狀態,而不需要調用onCheckedChange()
回調。如何在不影響onCheckedChangeListener中的onCheckedChanged()的情況下以編程方式打開/關閉計算按鈕
回答
方法1:如果你想在checkChangeListener
同時使用與視圖進行交互,然後implemenet onClickListener
把newsLetterUpdate
方法在該類
Mehtod 2只應調用:註銷監聽器之前,你programmaticaly改變複選框並在您完成後再次註冊
方法3:使用布爾標誌...設置它當您更改複選框時編程並設置爲false如果您完成... guard th e代碼與該標誌,你想執行用戶交互只
它應該在checkChangeListener中使用newsLetterUpdate()方法。然後?? – 2014-12-05 07:44:03
在你編程之前取消註冊監聽器複選框並在完成後再次註冊..使用布爾型標誌...當你更改複選框時進行編程設置,並且設置是否爲false,該標誌,你不想執行用戶交互只有 – 2014-12-05 07:51:20
因此,根據您的要求,我相信你只需要執行onCheckedChange()
回調中的代碼,只有當用戶啓動的行動。對?
那你爲什麼要用onCheckedChange()
,你可以用onClickListener()
來代替你的目標。
目前你可能寫你的代碼中:
compundbutton.setOnCheckedChangeListener(your_current_listener);
此舉代碼從那裏到:
compundbutton.setOnClickListener(your_new_listener);
然後onCheckedChange()
聽衆將不會在設置選中狀態programiccally調用。
compundbutton.setChecked(checked);
希望它可以幫助你..! :)
我覺得,取消註冊和註冊監聽器,這種方法更有效率。謝謝 – 2014-12-31 07:09:02
方法4:使用自定義視圖
import android.content.Context;
import android.util.AttributeSet;
import android.widget.Switch;
public class CustomSwitch extends Switch {
private OnCheckedChangeListener mListener;
public CustomSwitch(Context context) {
super(context);
}
public CustomSwitch(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomSwitch(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomSwitch(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
// Do not call supper method
mListener = listener;
}
@Override
public void setChecked(boolean checked) {
super.setChecked(checked);
if (mListener != null) {
mListener.onCheckedChanged(this, checked);
}
}
public void setCheckedProgrammatically(boolean checked) {
// You can call super method, it doesn't have a listener... he he :)
super.setChecked(checked);
}
}
示例XML使用
<com.your.package.CustomSwitch
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
現在的想法是要調用的方法setCheckedProgrammatically代碼。 setChecked得到由Android當用戶改變複方按鈕
請注意,我使用一個開關,它擴展了複方按鈕的狀態叫,你基本上可以使用相同的代碼上的任何其他(複選框,.. )
我有類似的問題。我有RadioGroup,當用戶打開應用程序時,我設置了初始狀態,並且它在OnCheckedChangeListener中進行,在我的情況下是更新數據庫中非常糟糕的數據。我已經解決了它,在OnCheckedChangedListener我正在按鈕,並在該方法中設置一個OnClickListener:
viberPermissionView.getAppPermissions().setOnCheckedChangeListener(
new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup,
int checkedRadioButtonId) {
final RadioButton checkedButton =
viberPermissionView.findViewById(checkedRadioButtonId);
checkedButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startService(checkedButton,
App.VIBER);
}
});
}
});
隨着那的onCreate被稱爲它打算在OnCheckedChangedListener時,但它不是在OnClickListener去。只有當用戶按下按鈕時,它纔會進入OnClick,並在我的情況下執行startService。希望這會有所幫助。
- 1. 如何以編程方式打開/關閉按鈕?
- 2. 在不按下按鈕的情況下關閉AlertDialog
- 3. 如何以編程方式關閉打開的jquery.reveal.js模式框?
- 4. 如何以編程方式在Android中打開/關閉通知?
- 5. 如何在不關閉主程序的情況下關閉jframe
- 6. 如何在Android中以編程方式開啓和關閉切換按鈕?
- 7. 如何在WP7上以編程方式打開/關閉WiFi
- 8. 如何在不按下按鈕的情況下開始活動?
- 9. 如何在沒有按鈕的情況下關閉AlertDialog.Builder
- 10. 如何在不影響任何其他組件的情況下禁用按鈕?
- 11. VBA不會關閉以編程方式打開的工作簿
- 12. 如何在不關閉投影機的情況下全屏關閉視頻
- 13. DrawerLayout:在不關閉抽屜的情況下打開新活動
- 14. 以編程方式關閉任何打開的燈箱?
- 15. 如何以編程方式打開/關閉定時器
- 16. Android:如何以編程方式打開和關閉屏幕?
- 17. 如何以編程方式關閉或打開「Windows功能」
- 18. 如何以編程方式打開和關閉layout_behavior行爲?
- 19. android在2.2中以編程方式打開和關閉GPS?
- 20. 在android中以編程方式打開和關閉屏幕
- 21. 如何以編程方式關閉在瀏覽器設置中打開的Foxit?
- 22. 如何在不通過IFile對象的情況下以編程方式打開Eclipse編輯器
- 23. Java開關(使用在另一種情況下計算的情況下的值)
- 24. 如何在不影響按鈕名稱的情況下更改按鈕中的文本?
- 25. 以編程方式打開/關閉GPS,而不提示iPhone
- 26. 如何在不關閉tkinter的情況下關閉pygames?
- 27. 如何在不關閉窗口的情況下關閉文檔?
- 28. 是否可以在不關閉流的情況下關閉Reader?
- 29. 如何在不關閉python並維護變量的情況下以編程方式停止執行python腳本?
- 30. 如何在不點擊按鈕的情況下關閉「navigator.notification.alert」消息
取一個標誌,並且當你以編程方式改變狀態複合按鈕時設置爲false,並在onCheckedChanged()基礎上檢查這個標誌值。 – 2014-12-05 06:43:00