7

是否可以在不调用该方法的情况下将选定的微调器位置更改为某个值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);

返回上一个选择,但这会再次创建我不想要的视图,因为我已经在视图中我只想表明我在微调器中的视图上

4

2 回答 2

3

它非常简单!

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()
        }
}

当你把方法调用放在 spinner listener 中时,由于 init 的 bug 在 2020 年仍然存在,方法会执行 self 的风险很大!

所以,这就是我解决它的方法!

于 2020-04-25T19:59:53.493 回答
1

AFAIK,没有办法停止被调用的函数。但是,您可以选择不使用简单的 if 执行函数中的代码(当您使用时setSelection)在此处查看接受的答案:

不需要的 onItemSelected 调用

于 2014-05-23T20:15:26.157 回答