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 在触摸时获取项目的主要内容,如果未能解决你的问题,请参考以下文章
如何从QML中的GridView或ListView获取实例化的委托组件