android 开关不以编程方式切换
android Switch not toggling programmatically
我试图以编程方式将开关切换回关闭状态,但是我遇到了问题。
我试过同时使用 myswitch.setischecked(false) 和 myswitch.toggle,它们都将开关保持在当前状态,但将背景从蓝色更改为灰色,所以 android 认为开关已关闭,但显示屏并未反映这一点。
这是我的代码
final Switch InstaPrint = (Switch) rootView.findViewById(R.id.instaprint);
final Switch MyZebraSwitch = (Switch) rootView.findViewById(R.id.myzebraswitch);
final Switch StockZebraSwitch = (Switch) rootView.findViewById(R.id.stockzebraswitch);
final Switch StoreZebraSwitch = (Switch) rootView.findViewById(R.id.storezebraswitch);
final Spinner MyZebraSpinner = (Spinner) rootView.findViewById(R.id.myzebraspinner);
final Spinner StockZebraSpinner = (Spinner) rootView.findViewById(R.id.stockzebraspinner);
final Spinner StoreZebraSpinner = (Spinner) rootView.findViewById(R.id.storezebraspinner);
//InstantPrint
InstaPrint.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(InstaPrint.isChecked())
{
if(!MyZebraSwitch.isChecked() && !StockZebraSwitch.isChecked() && !StoreZebraSwitch.isChecked())
{
Vibrator vib = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
vib.vibrate(1000);
// PlayFile("bell.mp3");
Toast toast = Toast.makeText(getActivity(), "You must select at least one printer", Toast.LENGTH_LONG);
toast.show();
InstaPrint.toggle();
}
}
}
});
还有其他人遇到过这种情况吗?
编辑 - 试玩后我发现改变我的设备方向可以解决问题,我的开关包含在一个片段中,所以重绘片段似乎可以纠正它,现在只需要弄清楚如何以编程方式重绘!
在状态侦听器中调用 toggle()
或 setChecked(boolean)
方法似乎有点违反直觉。我会期待某种无限循环或奇怪的行为,因为您以编程方式更改状态更改回调内的状态。我会尝试使用从 View
class 继承的 setOnClickListener(View.OnClickListener)
方法。
我试图以编程方式将开关切换回关闭状态,但是我遇到了问题。
我试过同时使用 myswitch.setischecked(false) 和 myswitch.toggle,它们都将开关保持在当前状态,但将背景从蓝色更改为灰色,所以 android 认为开关已关闭,但显示屏并未反映这一点。
这是我的代码
final Switch InstaPrint = (Switch) rootView.findViewById(R.id.instaprint);
final Switch MyZebraSwitch = (Switch) rootView.findViewById(R.id.myzebraswitch);
final Switch StockZebraSwitch = (Switch) rootView.findViewById(R.id.stockzebraswitch);
final Switch StoreZebraSwitch = (Switch) rootView.findViewById(R.id.storezebraswitch);
final Spinner MyZebraSpinner = (Spinner) rootView.findViewById(R.id.myzebraspinner);
final Spinner StockZebraSpinner = (Spinner) rootView.findViewById(R.id.stockzebraspinner);
final Spinner StoreZebraSpinner = (Spinner) rootView.findViewById(R.id.storezebraspinner);
//InstantPrint
InstaPrint.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(InstaPrint.isChecked())
{
if(!MyZebraSwitch.isChecked() && !StockZebraSwitch.isChecked() && !StoreZebraSwitch.isChecked())
{
Vibrator vib = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
vib.vibrate(1000);
// PlayFile("bell.mp3");
Toast toast = Toast.makeText(getActivity(), "You must select at least one printer", Toast.LENGTH_LONG);
toast.show();
InstaPrint.toggle();
}
}
}
});
还有其他人遇到过这种情况吗?
编辑 - 试玩后我发现改变我的设备方向可以解决问题,我的开关包含在一个片段中,所以重绘片段似乎可以纠正它,现在只需要弄清楚如何以编程方式重绘!
在状态侦听器中调用 toggle()
或 setChecked(boolean)
方法似乎有点违反直觉。我会期待某种无限循环或奇怪的行为,因为您以编程方式更改状态更改回调内的状态。我会尝试使用从 View
class 继承的 setOnClickListener(View.OnClickListener)
方法。