RecyclerView onclick 侦听器在点击动画完成之前触发

RecyclerView onclick listener fires before click animation completes

我在玩新的 RecyclerView。和 运行 分为几个问题:

  1. 我注意到它不支持点击监听器;我通过为每个列表项添加一个点击侦听器来解决这个问题。 (RecyclerView onClick)
  2. 当一个列表项被点击时,它不会显示棒棒糖漂亮的点击动画;我通过将以下属性添加到列表项 XML 来修复该问题:android:background="?android:attr/selectableItemBackground" (RecyclerView onItemClick effect in L)
  3. 我的实际问题:当我点击RecyclerView中的列表项时,立即通知监听器;我不喜欢这样,因为在点击侦听器转到下一个 activity 或其他东西之前,用户无法看到点击动画完成。

如何让 RecyclerView 在被点击时表现得更像 ListView,以便用户能够在通知点击侦听器之前看到点击动画完成?

我知道我可以通过使用 View.postDelayed 简单地解决这个问题,但这似乎不是最好的解决方案,因为在延迟期间,用户可能可以单击更多列表项。

下面是一个 link 到一个 android 工作室项目的存储库,该项目有一个 ListViewRecyclerView 并排以帮助演示问题:https://github.com/ericytsang/question.listview-vs-recyclerview

非常感谢!

我遇到了同样的问题。我正在处理片段并在单击列表项时替换片段,但没有显示点击动画。因此,我用启动另一个 Activity 的代码替换了片段代码,这解决了我的问题。你说在点击监听器进入另一个 "activity or something" 之前动画还没有完成,但对我来说有效。

代替这个

NewFragment newFragment = NewFragment.newInstance();
FragmentTransaction ft = (getFragmentManager()).beginTransaction();
ft.replace(R.id.fragment_container, newFragment);
ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();

我用这个

Intent transitionIntent = new Intent(getActivity(), DetailActivity.class);
startActivity(transitionIntent);