使用 rx-android 处理 recyclerview 项目点击的最佳方式
Best way to handle recyclerview item clicks using rx-android
我的 recyclerview 物品上有这种情况:
一旦我从我的 recyclerview 单击一个项目,我想向另一个 activity(比如 DetailsActivity)显示该项目的详细信息,同时利用新的 activity该 recyclerviewitem 上的视图转换(API 21)。
通过在 recyclerAdapter 的视图上设置 itemclick 侦听器找到了一些方法,但我不太确定由此可能引起的性能问题。
当然,我们可以通过意图 bundles/parcelables 将驻留在该 recyclerview 项目中的数据模型传递给 activity,但是,我完全不知道如何将它与 RxJava/RxAndroid 一起使用。我使用过 GreenRobot 的事件总线,但由于我使用 RxJava 进行改造,所以也可以使用它。
有人能给我指出正确的方向吗?
谢谢。
我以前做过,应该警告你,这听起来并不容易
第 1 步使用 RX 实现您自己的简单事件总线
您可以访问此站点 - weddingpartyapp.com This is a great tutorial by Kaushik Gopal to create a simple but efficient EventBus using RxAndroid.
or you can just use my code from here(这是一个废弃的项目我一年前开始,但有一个有效的 EventBus 和你问题的答案)
第 2 步 实现 EventBus 后,您必须为要在总线上传递的所有手势创建对象(点击、双击、长按等)
看看这段代码并实现你需要的所有对象 code
第 3 步将此代码添加到您的实现中 RecyclerView.OnItemTouchListener 如果您复制了我的代码,应该可以工作-
public RecyclerItemClickListener(Context c) {
bus = ... //get instance of bus
gestureDetector = new GestureDetector(c, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
bus.putValue(string, childPosition);
bus.publish(new BusEvents.RecyclerViewItemClick());
return true;
}
@Override
public void onLongPress(MotionEvent e) {
bus.publish(new BusEvents.TapEvent());
}
});
}
否则就用你创建的任何方法做同样的事情
希望对您有所帮助!
编辑
weddingpartyapp.com 不再可用。请使用 Way Back Machine 中的 this link 作为教程。
我的 recyclerview 物品上有这种情况:
一旦我从我的 recyclerview 单击一个项目,我想向另一个 activity(比如 DetailsActivity)显示该项目的详细信息,同时利用新的 activity该 recyclerviewitem 上的视图转换(API 21)。
通过在 recyclerAdapter 的视图上设置 itemclick 侦听器找到了一些方法,但我不太确定由此可能引起的性能问题。
当然,我们可以通过意图 bundles/parcelables 将驻留在该 recyclerview 项目中的数据模型传递给 activity,但是,我完全不知道如何将它与 RxJava/RxAndroid 一起使用。我使用过 GreenRobot 的事件总线,但由于我使用 RxJava 进行改造,所以也可以使用它。
有人能给我指出正确的方向吗?
谢谢。
我以前做过,应该警告你,这听起来并不容易
第 1 步使用 RX 实现您自己的简单事件总线
您可以访问此站点 - weddingpartyapp.com This is a great tutorial by Kaushik Gopal to create a simple but efficient EventBus using RxAndroid.
or you can just use my code from here(这是一个废弃的项目我一年前开始,但有一个有效的 EventBus 和你问题的答案)
第 2 步 实现 EventBus 后,您必须为要在总线上传递的所有手势创建对象(点击、双击、长按等)
看看这段代码并实现你需要的所有对象 code
第 3 步将此代码添加到您的实现中 RecyclerView.OnItemTouchListener 如果您复制了我的代码,应该可以工作-
public RecyclerItemClickListener(Context c) {
bus = ... //get instance of bus
gestureDetector = new GestureDetector(c, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
bus.putValue(string, childPosition);
bus.publish(new BusEvents.RecyclerViewItemClick());
return true;
}
@Override
public void onLongPress(MotionEvent e) {
bus.publish(new BusEvents.TapEvent());
}
});
}
否则就用你创建的任何方法做同样的事情
希望对您有所帮助!
编辑
weddingpartyapp.com 不再可用。请使用 Way Back Machine 中的 this link 作为教程。