【发布时间】:2016-05-25 15:49:07
【问题描述】:
我有一个带有 ItemTouchHelper 的 RecyclerView 来向左和向右滑动内部项目 - 当我通过 espresso 对它们执行 swipeLeft() 和 swipeRight() 时,如下所示:
onView(withId(R.id.pass_recyclerview)).perform(RecyclerViewActions.actionOnItemAtPosition(0,swipeRight()));
但不幸的是,这些测试是不稳定的 - 在某些设备上它们可以工作,而在某些设备上它们不能 - 是否有可靠的方法来执行此滑动操作?我已经玩过其他 EDGE_FUZZ_FACTOR - 但这也不是让它 100% 工作的方法
更新: 我对问题进行了更多的调试——在某些设备上,两者之间有一个取消事件:
event_t1 = {android.view.MotionEvent@830019549128} "MotionEvent { action=ACTION_DOWN, id[0]=0, x[0]=546.0, y[0]=40.0, toolType[0]=TOOL_TYPE_UNKNOWN, buttonState =0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=0, eventTime=788701990, downTime=788701990, deviceId=0, source=0x1002 }"
event_t2 = {android.view.MotionEvent@830019178264} "MotionEvent { action=ACTION_CANCEL, id[0]=0, x[0]=500.98276, y[0]=40.0, toolType[0]=TOOL_TYPE_UNKNOWN, buttonState =0, metaState=0, flags=0x0, edgeFlags=0x0, pointerCount=1, historySize=1, eventTime=788722868, downTime=788701990, deviceId=0, source=0x1002 }"
我在 ItemTouchHelper 的“public boolean onInterceptTouchEvent(RecyclerView recyclerView, MotionEvent event)”中看到了这一点。 这些是我在那里看到的唯一事件 - 有趣的是,当激活显示触摸数据的屏幕叠加层时,我看到在 ~1/10 的方式取消后滑动完成良好
【问题讨论】:
-
请添加失败尝试的 logcat。可能在某些设备上无法正确看到这个 recyclerView
-
不,我确实看到了回收商的意见