gpt4 book ai didi

android - 如何将 ontouchevent() 与 onitemclick 监听器一起使用?

转载 作者:行者123 更新时间:2023-11-29 02:04:30 25 4
gpt4 key购买 nike

我正在尝试为 GridView 制作水平 ScrollView 。我成功地使用了水平 ScrollView 。但是现在我也需要为同一个 GridView 实现 onItemClickListener。我使用 GestureDetector.SimpleOnGestureListener 和 onTouchEvent 进行水平滚动。如果我使用这个 onItemClickListener 是行不通的。有人帮我让两个工作。提前致谢。

最佳答案

我最近不得不处理同样的问题,这就是我解决它的方法。

首先,我覆盖了 ListFragment/ListActivity 中的默认 onListItemClick 监听器。然后在 onTouchEvent 方法中,我设置了一个条件,当条件为真时,调用 ListView 的 onListItemClick。当操作等于 MotionEvent.ACTION_UP 并且满足条件时,将执行此调用。您必须首先确定哪些事件构成您的 View 的点击。我将我的声明为 ACTION_DOWN,紧接着是 ACTION_UP。当您准备好执行 onListItemClick 时,您必须将实际项目的 View 、位置和 ID 传递给该方法。

请参阅下面的示例。

Class....{
private boolean clickDetected = true;

public boolean onTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
final int x = (int) ev.getX();
final int y = (int) ev.getY();

//if an action other than ACTION_UP and ACTION_DOWN was performed
//then we are no longer in a simple item click event group
//(i.e DOWN followed immediately by UP)
if (action != MotionEvent.ACTION_UP
&& action != MotionEvent.ACTION_DOWN)
clickDetected = false;

if (action == MotionEvent.ACTION_UP){
//check if the onItemClick requirement was met
if (clickDetected){
//get the item and necessary data to perform onItemClick
//subtract the first visible item's position from the current item's position
//to compensate for the list been scrolled since pointToPosition does not consider it
int position = pointToPosition(x,y) - getFirstVisiblePosition();
View view = getChildAt(position);
if (view != null){//only continue if a valid view exists
long id = view.getId();
performItemClick(view, position, id);//pass control back to fragment/activity
}//end if
}//end if

clickDetected= true;//set this to true to refresh for next event
}//end if
return super.onTouchEvent(ev);
....
}//end onTouchEvent
}//end class

此设置具有很大的灵 active ,例如,如果您想设置长按,您可以执行与上述相同的操作,并简单地检查 ACTION_DOWN 和 ACTION_UP 之间的时间差。

另一种方法是获取启动向下 Action 的项目的位置,并将其与向上 Action 的位置进行核对,甚至为向下和向上 Action 设置时间差标准(比如小于 1 秒)。

关于android - 如何将 ontouchevent() 与 onitemclick 监听器一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10793599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com