是否可以在不调用onItemSelected
方法的情况下将选定的微调器位置更改为某些位置?
基本上我要做的是回到微调器中之前选择的项目,因为其中一个项目在选中时会显示一个对话框。当用户点击后退按钮时,微调器仍然显示它们在被解除时显示对话框的位置。
那么有没有办法让它在使用spinner.setSelection(position)
恢复时不被调用,或者是否有办法保持显示对话框的位置不被选中?
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
switch(arg2){
case 0:
previousSelection = 1;
mNavButtonClick.onNavButtonClick(1);
break;
case 1:
previousSelection = 2;
mNavButtonClick.onNavButtonClick(2);
break;
case 2:
previousSelection = 3;
mNavButtonClick.onNavButtonClick(3);
break;
case 3:
previousSelection = 4;
mNavButtonClick.onNavButtonClick(4);
break;
case 4:
previousSelection = 5;
mNavButtonClick.onNavButtonClick(5);
break;
case 5:
//this case shows the dialog
mNavButtonClick.onNavButtonClick(6);
break;
default:
break;
}
}
显示对话框,用户单击后退按钮关闭对话框并在onDismiss
我打电话
spinner.setSelection(previousSelection);
回到之前的选择,但这又重新创建了我不想要的视图,因为我已经在视图中我只想表明我在旋转器中的视图
答案 0 :(得分:2)
非常简单!
spinner.adapter = adapter
spinner.setSelection(pos) // whatever integer!
spinner.setTag("bug init")
spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(p0: AdapterView<*>?) = Unit
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, position: Int, p3: Long) {
if (spinner.getTag().equals("bug init")) {
spinner.setTag("okay, no more bug")
}
else {
whateverMethod()
}
}
当您将方法调用放入微调监听器中时,由于init的错误在2020年仍将存在,因此该方法将自行执行的风险非常大!
所以,这就是我解决的方法!
答案 1 :(得分:1)
AFAIK,没有办法停止被调用的函数。但是,你可以选择不使用简单的if来执行函数中的代码(当你使用setSelection
时)在这里查看接受的答案: