Android 微调器setOnItemLongClickListener不工作

Android 微调器setOnItemLongClickListener不工作,android,android-spinner,android-contextmenu,Android,Android Spinner,Android Contextmenu,我需要添加使用上下文菜单或对话框编辑微调器项目的功能,当用户长按某个项目时,该菜单或对话框应该出现 在我看来,有人试图使用 spinner.setOnItemLongClickListener(new OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> parent, View view, int arg2, long arg3) {

我需要添加使用上下文菜单或对话框编辑微调器项目的功能,当用户长按某个项目时,该菜单或对话框应该出现

在我看来,有人试图使用

spinner.setOnItemLongClickListener(new OnItemLongClickListener() {

            public boolean onItemLongClick(AdapterView<?> parent, View view, int arg2, long arg3) {

                view.showContextMenu();
                return true;

            }
        });
但这种方法不起作用

我使用

ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, R.layout.my_spinner_item_layout, itemList); spinner.setAdapter(adapter);
我在另一个问题中看到,有人建议避免尝试为微调器实现上下文菜单,但我没有太多空间,因此我无法使用ListView而不产生难看的结果,并且此操作仅在极少数情况下才需要,因此上下文菜单或类似的内容似乎是唯一有效的选择


如何实现Spinner的上下文菜单或扩展Android Spinner以支持Spinner中的长点击项目?

1通过扩展Spinner创建自定义Spinner类

public class CCSpinner extends Spinner {
    public CCSpinner(Context context) {
        super(context);
    }

    public CCSpinner(Context context, int mode) {
        super(context, mode);
    }

    public CCSpinner(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CCSpinner(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public CCSpinner(Context context, AttributeSet attrs, int defStyleAttr, int mode) {
        super(context, attrs, defStyleAttr, mode);
    }

    @Override
    public void onDetachedFromWindow() {
        super.onDetachedFromWindow();
    }
} 
在xml视图中使用上述微调器

2定义一个界面来处理点击

 public interface ClickListener {
        void onItemLongClicked(View view);
        void onItemClicked(View view);
    }
3在spinner适配器类中,在getView和getDropDownView中执行这些操作

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //ususal stuffs
        convertView.setTag(R.string.click_tag, position);
        convertView.setClickable(false);
        convertView.setLongClickable(false);



        return convertView;
    }


    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        //ususal stuffs
        convertView.setTag(R.string.click_tag, position);

        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (clickListener != null) {
                    clickListener.onItemClicked(v);
                }
            }
        });


        convertView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (clickListener != null) {
                    clickListener.onItemLongClicked(v);
                }
                return true;
            }
        });

        return convertView;
    }
4在实例化适配器时,传递我们创建的ClcikListener接口

5在实现类中执行以下操作:

@Override
    public void onItemLongClicked(final View view) {
        mPSpinner.onDetachedFromWindow();
        final int pos = (int) view.getTag(R.string.click);
        mPSpinner.setSelection(pos);
    }


    @Override
    public void onItemClicked(final View view) {
        mPSpinner.onDetachedFromWindow();
        int pos = (int) view.getTag(R.string.click);
        mPSpinner.setSelection(pos);
    }

尝试交叉检查微调器id/如果您有嵌套视图,则禁用该布局上的焦点以获取微调器上的事件我有一个显示字符串数组的微调器没有自定义微调器实现,我不明白您的意思。你能给我更多的细节吗?你能把你的代码添加到调试中吗..我们不能帮你直到我们能看到你的实现…代码是什么?我使用ArrayAdapter=new ArrayAdapter this,R.layout.my_Spinner_item_layout,itemList填充微调器;spinner.SetAdapter适配器;上下文菜单与长时间单击不同