Android微调器项目长按/触摸

时间:2012-04-07 00:07:43

标签: android click spinner

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

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

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

我需要检测长按,因为我想启用删除微调器的每个项目。 是否有其他智能方法可以删除项目?

2 个答案:

答案 0 :(得分:0)

Spinner还不支持Jason Robinson指出的Long Click。

答案 1 :(得分: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);
}