我遇到了一个大问题。我做了一个列表视图。但我想让列表视图在长按和触摸等一些操作上运行,以及一些基本的列表视图操作,如向上和向下滚动。
我尝试在列表视图中使用setOnItemLongClickListener
进行长按,setOnTouchListener
进行补足操作。但是,它们效果不佳,尤其是setOnTouchListener
ACTION_UP
。当我长时间按屏幕然后再触摸屏时,会调用OnItemLongClickListener
,但根本不会调用onTouchListener
。此外,当列表视图中的项目很少时,如果在列表视图的底部按下,则不会触发OnItemLongClickListener
。
所以,我尝试了另一种方式。我制作了一个与列表视图大小相同的按钮,并使按钮在长按和手指上起作用。我创建了没有背景的按钮,并将其与列表视图重叠。但是,另一个问题来了。如果按钮位于上方,则列表视图无法上下滚动。另一方面,如果列表视图已启动,则按钮不能在长按和触摸时起作用。
顺便说一句,我在OnItemLongClickListener
和onTouchListener
都返回false。
为什么Android不会将屏幕操作分配到同一位置的两个视图?
答案 0 :(得分:0)
不是使用两个视图,我只会坚持使用listview,但是使用好听众,你可以做你想做的事。假设你想要一个actionUp()方法,你可以在经典的listview回调结束时调用它,在你的情况下,可能是:
lv.setOnItemLongClickListener(new OnItemLongClickListener() { ...call actionUp() at the end
以及经典
的结尾lv.setOnItemClickListener(new OnItemClickListener() { ...call actionUp() at the end
以及
结束时lv.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if(scrollState == SCROLL_STATE_IDLE) {
//if we went from SCROLL_STATE_TOUCH_SCROLL to SCROLL_STATE_IDLE then a touch up occured somehow
actionUp();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});