安卓微调器 : onItemSelected listener is not called when selecting the same item

标签 android listener android-spinner

我需要在 Spinner 中选择第二个项目时显示 AlertDialog。我知道使用 onItemSelected 我们可以收听微调器选择并显示弹出窗口。问题是当我选择第二个项目时,对话框出现,但在关闭对话框然后我们再次选择相同的项目后,它不会显示对话框,因为 onItemSelected 不会被调用。有什么解决方法吗?不使用自定义 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;
    }

}

设置监听器

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

        }
    };

将监听器对象传递给自定义监听器

cusSpinner.setOnItemSelectedEvenIfUnchangedListener(listener);

关于安卓微调器 : onItemSelected listener is not called when selecting the same item,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31742895/

相关文章:

Javafx 在复选框更改时更新表格 View

java - Android 旋转器选择同一项目两次

android - 如何将 Spinner 选定的项目值转换为字符串?

android - navigator.geolocation.getCurrentPosition 在 React Native 中不起作用

java - 监听 JFrame 的 Action

java - 向 Spring 和 Hibernate 5 注册事件监听器

android - 为微调器android的选定项目设置外部字体

java - 调用 fragment 时 fragment 选项菜单出现问题?

java - 路径 "file:///android_asset/"记录在哪里?

android - 如何防止在 Android 应用程序中录制屏幕视频?