首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用onItemClick和onTouch的Android -onTouch

使用onItemClick和onTouch的Android -onTouch
EN

Stack Overflow用户
提问于 2014-10-25 13:52:55
回答 2查看 1.2K关注 0票数 0

我试图为ListView实现类似于“拖放”的东西。任务很简单。我有一个“侧菜单”,我在列表中放置了一些对象。它们都展示在那里。我想要的是把其中一个拖到屏幕上。

我首先尝试使用OnTouchListener,它为我提供了我想要的拖放功能。所以我做了一件事

代码语言:javascript
复制
@Override
public boolean onTouch(View view, MotionEvent movEv) {
    if (movEv.getAction() == MotionEvent.ACTION_DOWN)
        // DRAG
    else if (movEv.getAction() == MotionEvent.ACTION_UP)
        // DROP
    return false;
}

重点是,这只给了我MotionEvent的信息,比如X和Y位置。我需要的是知道哪个项目被点击了。有点像OnItemClickListener

问题是,只有当我“单击”一个项目时,OnItemClickListener才能工作,这意味着我没有移动手指。当我移动并释放它的时候,侦听器就不再认为这是单击了。因此使用

代码语言:javascript
复制
 @Override
 public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
   // I know which item was pressed -> position
 }

不起作用。

有人知道怎么解决这个问题吗?我可以在“onItemClick”时刻使用onPressed吗?

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-25 14:40:23

而不是OnItemClickListener,您可以在OnTouchListener中使用pointToPosition方法。它可以是这样的:

代码语言:javascript
复制
@Override
public boolean onTouch(View view, MotionEvent movEv) {
    if (movEv.getAction() == MotionEvent.ACTION_DOWN) {
        int itemPosition = listView.pointToPositon(movEv.getX(), movEv.getY());
        // DRAG
    }
    else if (movEv.getAction() == MotionEvent.ACTION_UP)
        // DROP
    return false;
}
票数 1
EN

Stack Overflow用户

发布于 2014-10-25 14:48:43

一种解决方案是为适配器中的每一项注册一个触摸侦听器,并保存它的位置,以便它在侦听器中可用。

下面是一个例子:

代码语言:javascript
复制
private class MyAdapter extends ArrayAdapter<String> implements View.OnTouchListener {

    public MyAdapter(Context context, int resource) {
        super(context, resource);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = super.getView(position, convertView, parent);
        v.setOnTouchListener(this);
        v.setTag(position);
        return v;
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        Integer position = (Integer) view.getTag();
        // Do something with item at "position"

        return false;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26563141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档