GridView 在触摸时获取项目

Posted

技术标签:

【中文标题】GridView 在触摸时获取项目【英文标题】:GridView Get Item On Touch 【发布时间】:2011-09-19 02:18:37 【问题描述】:

我正在尝试在触摸 gridview 时选择项目,但我无法使用 onClick,因为它会启动另一个活动。我想要实现的是能够在网格视图中移动项目,因为我找不到这样做的方法,所以我正在尝试一种方法..

所以是的.. 有没有办法让哪个项目被“触摸”,我尝试使用 Rect 但它没有正常工作..

(我能详细说明一下吗..我不能为此使用 onItemClick..)

任何帮助都会很棒,谢谢! :)

【问题讨论】:

我有点困惑。您想确定单击了哪个项目以便可以移动它,但是由于启动了新的 Activity,您不能使用单击项目时调用的方法?如果您想要在 android 主屏幕上使用的功能,您可以查看 onLongClickListener()。 你好 Thomas,你能分享一些代码 sn-p 因为我必须解决类似的问题,我想将网格的图像从一个单元格排列到另一个单元格。 【参考方案1】:

获取被“触摸”的项目

gridView.setOnTouchListener(new OnTouchListener() 
        public boolean onTouch(View v, MotionEvent me) 

            int action = me.getActionMasked();  // MotionEvent types such as ACTION_UP, ACTION_DOWN
            float currentXPosition = me.getX();
            float currentYPosition = me.getY();
            int position = gridView.pointToPosition((int) currentXPosition, (int) currentYPosition);

            // Access text in the cell, or the object itself
            String s = (String) gridView.getItemAtPosition(position);
            TextView tv = (TextView) gridView.getChildAt(position);
    

【讨论】:

不简单也不优雅。 gridView.getChildAt(position) 将返回 null,因为 GridView 重用了它的元素,就像 ListView 对行所做的那样。【参考方案2】:

如果 Glendon Trullinger 关于使用 onLongClickListener 的建议对您来说还不够,请尝试使用 GridView#pointToPosition(int x, int y),您可以使用 MotionEvent 的 x 和 y 坐标从 View.OnTouchListener 调用它。使用该位置,您可以使用this answer 获取该位置的子视图,和/或您可以使用AdapterView#getItemAtPosition(int) 获取适配器项本身

【讨论】:

以上是关于GridView 在触摸时获取项目的主要内容,如果未能解决你的问题,请参考以下文章

选择时如何在 GridView 中获取文本?

如何为我的 GridView 包含 SearchView?

如何从QML中的GridView或ListView获取实例化的委托组件

如何在适配器外部的 ListView 和 GridView 中获取项目位置?

Gridview背景颜色在Android中滚动时改变颜色

如何获取gridview(或RecyclerGridview)的选定项目的所有最近位置