Android Spinner:选择相同项目时不会调用onItemSelected侦听器 [英] Android Spinner: onItemSelected listener is not called when selecting the same item

查看:364
本文介绍了Android Spinner:选择相同项目时不会调用onItemSelected侦听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆