小编Fen*_*der的帖子

Jetpack Navigation 中从 RecyclerView 到 Detail Fragment 的共享元素转换

我正在尝试使用片段之间共享元素的简单动画进行过渡。在第一个片段中,我在 RecyclerView 中有元素,在第二个片段中 - 完全相同的元素(在单独的 xml 布局中定义,在列表中的元素也是这种类型)在顶部和视图的其余部分中的细节。我正在为 bindViewHolder 和目标片段的 onCreateView 中的所有元素提供各种 transitionNames 我正在阅读它们并将它们设置为我想要进行过渡的元素。无论如何动画没有发生,我没有任何其他想法。下面我将我的代码片段来自源和目标片段以及列表适配器:

列表适配器:

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val item = list[position]
    ViewCompat.setTransitionName(holder.view, item.id)
    holder.view.setOnClickListener {
        listener?.onItemSelected(item, holder.view)
    }
    ...
}

interface interactionListener {
    fun onItemSelected(item: ItemData, view: View)
}
Run Code Online (Sandbox Code Playgroud)

列表片段(来源):

override fun onItemSelected(item: ItemData, view: View) {
    val action = ListFragmentDirections.itemDetailAction(item.id)
    val extras = FragmentNavigatorExtras(view to view.transitionName)
    val data = Bundle()
    data.putString("itemId", item.id)
    findNavController().navigate(action.actionId, data, null, extras)
}
Run Code Online (Sandbox Code Playgroud)

源片段布局:

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/pullToRefresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent" …
Run Code Online (Sandbox Code Playgroud)

android android-animation kotlin android-transitions android-jetpack

4
推荐指数
1
解决办法
3712
查看次数