Spinner 不会响应点击...即使 onItemSelected 被调用?

2024-02-28

我的 Activity 为微调器实现了 OnItemSelected 侦听器。它有一个有趣的问题,即当活动显示时触发 onItemSelected 回调。所以我使用了一个flag hack来解决它(我讨厌它,但此时我只想让应用程序工作)。

奇怪的是,即使回调在活动开始时被调用,我的实际触摸选择也不起作用。我可以触摸列表,打开它,查看数组适配器中的字符串,甚至触摸它以使其关闭 - 但回调永远不会被调用。

My code:

public class MyActivity extends Activity implements OnItemSelectedListener {
…
private ArrayList<String> mMyTypes = null;
private ArrayAdapter<String> mMyAdapter = null;
private Spinner mMyTypeSpinner = null;
// hack for spinner
boolean isFirstRunWithSpinner = true;

在 onCreate() 中:

mMyTypeSpinner = (Spinner) findViewById(R.id.my_activity_spinner);

mMyTypes = new ArrayList<String>();
mMyTypes.add("Test string");

mMyAdapter = new ArrayAdapter<String>(this, R.layout.custom_spinner_style, mMyTypes);
mMyAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mMyTypeSpinner.setAdapter(mMyAdapter);

// spinner listener
mMyTypeSpinner.setOnItemSelectedListener(this);

回调:

@Override
public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
 Toast
 .makeText(ConfirmEditActivity.this, "Selected", Toast.LENGTH_LONG)
 .show();
if( isFirstRunWithSpinner ) { isFirstRunWithSpinner = false; return; }
…
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
 Toast
 .makeText(ConfirmEditActivity.this, "Nothing", Toast.LENGTH_LONG)
 .show();
}

显示活动时,会立即显示 toast,但是当我在微调器中选择项目时,微调器会关闭,并且不会再次显示 toast(更不用说回调中的其余代码无法执行)。

有什么观察吗?

我真的希望这是简单的事情......


仅当选择新项目时,微调器才会响应 ItemSelected 事件。如果只显示一项,显然您只能在下拉列表中重新选择这一项。这是 android spinner 的正确行为。如果列表中有超过 1 个项目,并且单击的项目不是当前选定的项目,则 onItemSelected 将被触发。

来自安卓文档:

public Abstract void onItemSelected(AdapterView父级,View视图,int位置,长id)

选择此视图中的项目时要调用的回调方法。仅当新选择的位置与之前选择的位置不同或者没有选择的项目时才会调用此回调。

希望我能帮忙。

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

Spinner 不会响应点击...即使 onItemSelected 被调用? 的相关文章

随机推荐