【问题标题】:RecyclerView onclick listener fires before click animation completesRecyclerView onclick 监听器在点击动画完成之前触发
【发布时间】:2015-06-08 00:48:40
【问题描述】:

我在玩新的RecyclerView。并遇到了一些问题:

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

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

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

下面是一个 android studio 项目的存储库的链接,该项目有一个 ListViewRecyclerView 以帮助演示该问题:https://github.com/ericytsang/question.listview-vs-recyclerview

非常感谢!

【问题讨论】:

  • 最终只使用了 ListView。

标签: android android-recyclerview listeners


【解决方案1】:

我有同样的问题。我正在使用片段并在单击列表项时替换片段,但单击动画未显示。因此,我将片段代码替换为启动另一个 Activity 的代码,这解决了我的问题。你说在点击监听器进入另一个“活动或其他东西”之前动画还没有完成,但对我来说有效。

这个

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);

【讨论】:

  • 经过一番试验,你是对的!让侦听器使用意图启动另一个活动确实可以解决问题,并且我可以在下一个活动开始之前看到动画完成。但是,正如您所指出的,对于片段事务和显示对话框之类的事情,您看不到完整的动画。哦,好吧!
  • 我会继续挖掘这个,一定有动画没有完成的原因或使用片段解决它的方法。如果有什么新的东西,我会告诉你的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 2016-06-09
相关资源
最近更新 更多