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

标签 android

我已经为微调器编写了一个 setOnItemSelectedListener 以在微调器项目更改时做出响应。我的要求是当我再次单击当前选定的项目时,应该显示一个 toast。如何获得这个 Activity ?再次单击当前选定的项目时,微调器没有响应。 `

    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();

        }
    });  

最佳答案

我花了好几个小时试图解决这个问题。我结束了以下。我不确定它是否适用于所有情况,但它似乎对我有用。它只是 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());
        }
    }

}

关于android - 再次选择当前选定项目时,如何在 Android Spinner 中获取事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5335306/

相关文章:

android - 如何在下一版本的房间数据库 Android 中删除列?

java - 支持谷歌地图 API v2 和最低 Android 目标版本

android - 在 kotlin 中关闭/隐藏 SoftinputKeyboard

android - 旋转动画android

java - 在android中从json创建动态表单

android - Built.io 上传进度 - android

android - ScrollView 不会回到布局的开头 - Android

android - 数组中有多个项目时出现 ArrayAdapter 错误

android - 更改 WebView 中的文本颜色?

android - 在 Kotlin 的 Injekt 库中,如何创建本地作用域,例如为每个 Android Activity 创建本地作用域?