为了账号安全,请及时绑定邮箱和手机立即绑定

当再次选择当前选定的项目时,如何在Android Spinner中获得事件?

当再次选择当前选定的项目时,如何在Android Spinner中获得事件?

偶然的你 2019-11-12 13:08:45
我已经为旋转器编写了一个setOnItemSelectedListener,以在旋转器项目更改时做出响应。我的要求是,当我再次单击当前选择的项目时,应显示一个祝酒词。如何获得此活动?再次单击当前选择的项目时,微调器没有响应。`    StorageSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){        @Override        public void onItemSelected(AdapterView adapter, View v, int i, long lng) {                          Toast.makeText(getApplicationContext(), (CharSequence) StorageSpinner.getSelectedItem(), Toast.LENGTH_SHORT).show();        }        @Override        public void onNothingSelected(AdapterView arg0) {            Toast.makeText(getApplicationContext(), "Nothing selected", Toast.LENGTH_SHORT).show();        }    });  
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

当您再次单击当前选定的项目时,它将无法触发任何事件。因此,您无法捕获setOnItemSelectedListener以便微调器响应。


查看完整回答
反对 回复 2019-11-12
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

我花了好几个小时试图找到解决这个问题的方法。我得出以下结论。我不确定它是否在所有情况下都有效,但它似乎对我有用。它只是Spinner类的扩展,该类检查选择内容并在选择内容设置为相同值时调用侦听器。


import android.content.Context;

import android.util.AttributeSet;

import android.widget.Spinner;



/** Spinner extension that calls onItemSelected even when the selection is the same as its previous value */

public class NDSpinner extends Spinner {


    public NDSpinner(Context context)

    { super(context); }


    public NDSpinner(Context context, AttributeSet attrs)

    { super(context, attrs); }


    public NDSpinner(Context context, AttributeSet attrs, int defStyle)

    { super(context, attrs, defStyle); }


    @Override 

    public void setSelection(int position, boolean animate) {

        boolean sameSelected = position == getSelectedItemPosition();

        super.setSelection(position, animate);

        if (sameSelected) {

            // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now

            getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId());

        }

    } 


    @Override

    public void setSelection(int position) {

        boolean sameSelected = position == getSelectedItemPosition();

        super.setSelection(position);

        if (sameSelected) {

            // Spinner does not call the OnItemSelectedListener if the same item is selected, so do it manually now

            getOnItemSelectedListener().onItemSelected(this, getSelectedView(), position, getSelectedItemId());

        }

    }


}


查看完整回答
反对 回复 2019-11-12
?
倚天杖

TA贡献1828条经验 获得超3个赞

尝试这个


public class MySpinner extends Spinner{


OnItemSelectedListener listener;


    public MySpinner(Context context, AttributeSet attrs)

    {

        super(context, attrs);

    }


    @Override

    public void setSelection(int position)

    {

        super.setSelection(position);


        if (position == getSelectedItemPosition())

        {

            listener.onItemSelected(null, null, position, 0);

        }       

    }


    public void setOnItemSelectedListener(OnItemSelectedListener listener)

    {

        this.listener = listener;

    }

}


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 618 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信