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

我已经为旋转器编写了一个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();


        }

    });  


偶然的你
浏览 624回答 3
3回答

慕虎7371278

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

繁星淼淼

我花了好几个小时试图找到解决这个问题的方法。我得出以下结论。我不确定它是否在所有情况下都有效,但它似乎对我有用。它只是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());        }    }}

倚天杖

尝试这个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;    }}
打开App,查看更多内容
随时随地看视频慕课网APP