如果选择非零位置,则 Spinner 的 onItemSelected 回调在旋转后调用两次

2024-05-04

当我创建活动时,我设置了一个 Spinner,为其分配了一个侦听器和一个初始值。我知道onItemSelected回调在应用程序初始化期间自动调用。我觉得奇怪的是这种情况发生了twice当设备旋转时,会给我带来一些问题,我必须以某种方式规避这些问题。这确实not如果微调器初始选择为零,则会发生这种情况。我能够隔离这个问题,这是触发它的最简单的活动:

public class MainActivity extends Activity implements OnItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("Test","Activity onCreate");
    setContentView(R.layout.activity_main);
    ((Spinner)findViewById(R.id.spinner1)).setSelection(2);
    ((Spinner)findViewById(R.id.spinner1)).setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> spin, View selview, int pos, long selId)
{
    Log.i("Test","spin:"+spin+" sel:"+selview+" pos:"+pos+" selId:"+selId);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {}
}

这是应用程序启动然后设备旋转时显示的 logcat:

    I/Test( 9881): spin:android.widget.Spinner@4052f508 sel:android.widget.TextView@40530b08 pos:2 selId:2
    I/Test( 9881): Activity onCreate
    I/Test( 9881): spin:android.widget.Spinner@40535d80 sel:android.widget.TextView@40538758 pos:2 selId:2
    I/Test( 9881): spin:android.widget.Spinner@40535d80 sel:android.widget.TextView@40538758 pos:2 selId:2

这是预期的行为吗?我错过了什么吗?


设法在另一个 stackoverflow 问题中找到解决方案:

spinner.post(new Runnable() {
    public void run() {
        spinner.setOnItemSelectedListener(listener);
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果选择非零位置,则 Spinner 的 onItemSelected 回调在旋转后调用两次 的相关文章

随机推荐