我有一个非常简单的案例。我想在RececlerView和中的项目之间实现共享元素转换fragment。我在我的应用程序中使用android导航组件。
上有一篇关于developer.android上的共享过渡和关于stackoverflow的文章,但是该解决方案仅适用于位于fragment布局中的视图,该视图开始过渡并且不适用于的项目RecyclerView。在github上也有一个lib,但是我不想依靠第三方的lib自己做。
有解决方案吗?也许应该工作,这只是一个错误?但是我还没有找到任何信息。
代码示例:
过渡开始
class TransitionStartFragment: Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_transition_start, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val testData = listOf("one", "two", "three")
val adapter = TestAdapter(testData, View.OnClickListener { transitionWithTextViewInRecyclerViewItem(it) })
val recyclerView = view.findViewById<RecyclerView>(R.id.test_list)
recyclerView.adapter = adapter
val button = view.findViewById<Button>(R.id.open_transition_end_fragment)
button.setOnClickListener { transitionWithTextViewInFragment() }
}
private fun transitionWithTextViewInFragment(){ …Run Code Online (Sandbox Code Playgroud) android shared-element-transition android-recyclerview android-architecture-navigation
我在我的演示应用程序中使用了 android 导航组件。我有一个非常简单的案例。一个活动,两个片段,A 和 B。我已经按照 Google 的示例应用程序设置了导航控件。当我尝试使用简单的 onClickListener 从 A 打开片段 B 时,如下所示:
val button.setOnClickListener {
val action = AFragmentDirections.openFragmentB()
findNavController().navigate(action)
}
Run Code Online (Sandbox Code Playgroud)
一切正常。B 片段打开,通过点击后退按钮它会弹出。但是当我尝试从 LiveData 观察者使用它时,如下所示:
viewModel.openFragmentB.observe(viewLifecycleOwner, Observer {
val action = AFragmentDirections.openFragmentB()
findNavController().navigate(action)
})
Run Code Online (Sandbox Code Playgroud)
片段 B 打开,但通过点击后退按钮应用程序崩溃,错误导航目标 com.myapp:id/open_fragmetn_b 是此 NavController 未知的。
为什么会发生这种情况以及如何将导航组件与 LiveData 一起使用?
navigation android android-livedata android-architecture-navigation