1

我的应用程序微调器中有。我想检测对其项目的长按/触摸。我试过这个:

    ipSpinner.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            System.out.println("long click on position: " + arg2);
            return true;
        }
    });

但是这段代码不起作用,我不知道为什么。

我需要检测长按,因为我想启用删除微调器的每个项目。还有另一种删除项目的聪明方法吗?

4

2 回答 2

0

正如 Jason Robinson 所指出的,Spinner 尚不支持 Long Click。

于 2012-11-27T20:31:16.530 回答
0

1)通过扩展微调器创建一个自定义微调器类,

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) 在您的微调器适配器类中,在 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);
}
于 2016-02-04T07:23:03.873 回答