Android Spinner:选择相同项目时不会调用onItemSelected侦听器 [英] Android Spinner: onItemSelected listener is not called when selecting the same item
问题描述
在Spinner
中选择第二项时,我要求显示AlertDialog
.我知道使用onItemSelected
我们可以收听微调器选择&显示一个弹出窗口.问题是当我选择第二个项目时,出现对话框,但是在关闭对话框后再次选择相同的项目,它不会显示对话框,因为不会调用onItemSelected
.有什么解决方法吗?无需使用自定义Spinner
实现.
I have a requirement to show an AlertDialog
when selecting the 2nd item in Spinner
. I know that using onItemSelected
we can listen to the spinner selection & show a popup. The issue is when I select the 2nd item, the dialog appears but after closing the dialog and then again we select the same item, it won't show the dialog as onItemSelected
will not be invoked. Is there any workaround for this? Without using a custom Spinner
implementation.
推荐答案
创建自定义微调器
Create a custom spinner
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
public class CustomSpinner extends Spinner {
OnItemSelectedListener listener;
private AdapterView<?> lastParent;
private View lastView;
private long lastId;
public CustomSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
initlistner();
}
@Override
public void setSelection(int position) {
if (position == getSelectedItemPosition() && listener != null) {
listener.onItemSelected(lastParent, lastView, position, lastId);
} else {
super.setSelection(position);
}
}
private void initlistner() {
// TODO Auto-generated method stub
super.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
lastParent = parent;
lastView = view;
lastId = id;
if (listener != null) {
listener.onItemSelected(parent, view, position, id);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
if (listener != null) {
listener.onNothingSelected(parent);
}
}
});
}
public void setOnItemSelectedEvenIfUnchangedListener(
OnItemSelectedListener listener) {
this.listener = listener;
}
}
设置监听器
Set Listener
private OnItemSelectedListener listener;
listener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
};
将侦听器对象传递给自定义侦听器
Pass the listener object to custom listener
cusSpinner.setOnItemSelectedEvenIfUnchangedListener(listener);
这篇关于Android Spinner:选择相同项目时不会调用onItemSelected侦听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!