我有一个 Android Spinner,当用户在显示 Spinner 的选择面板时按“后退键”时,我想监听该事件。我已经实现了 OnItemSelectedListener ,但按后退键时未调用 onNothingSelected(AdapterView arg0) 。
我只想在用户选择任何内容(或选择面板消失)时监听事件。
有正确的方法吗?
Thanks!
Spinner s1 = (Spinner) findViewById(R.id.spinner1);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.colors, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
s1.setAdapter(adapter);
s1.setOnItemSelectedListener(
new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?> parent, View view, int position, long id) {
showToast("Spinner1: position=" + position + " id=" + id);
}
public void onNothingSelected(AdapterView<?> parent) {
showToast("Spinner1: unselected");
}
});
这是Android 2.2 SDK中的示例,当选择面板消失时,它也不会显示“Spinner1:未选择”。
如果不延长时间,您似乎将无法做您想做的事情Spinner
班级。看起来Spinner
没有注册OnCancelListener
与AlertDialog
它构建用于显示项目。
代码来自Spinner.java http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/widget/Spinner.java:
@Override
public boolean performClick() {
boolean handled = super.performClick();
if (!handled) {
handled = true;
Context context = getContext();
final DropDownAdapter adapter = new DropDownAdapter(getAdapter());
AlertDialog.Builder builder = new AlertDialog.Builder(context);
if (mPrompt != null) {
builder.setTitle(mPrompt);
}
mPopup = builder.setSingleChoiceItems(adapter, getSelectedItemPosition(), this).show();
}
return handled;
}
public void onClick(DialogInterface dialog, int which) {
setSelection(which);
dialog.dismiss();
mPopup = null;
}
Also, setSelection
仅当单击对话框中的项目时才调用。当用户按下后退按钮时,不会调用此函数,因为这是一个OnCancel
event.
延伸Spinner
会有点痛苦,因为你必须将所有内容复制回AdapterView
从 android 源代码进入您的源代码,因为实现所需的各种成员字段仅在包级别公开。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)