NavController sharedTransition RecyclerView项无法分段工作

时间:2019-04-08 19:15:47

标签: android android-fragments android-recyclerview uinavigationcontroller transition

因此,我已经阅读了sharedTransitions上的所有文章和示例,而且看起来很简单,但是由于某些原因,它对我不起作用。

这是我的RecyclerView.Item布局:

<androidx.cardview.widget.CardView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/LibraryItem">

        <ImageView
                android:id="@+id/library_note_image"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:transitionName="@string/library_item_transition"
                style="@style/LibraryImage"/>
    </androidx.cardview.widget.CardView>

这是我的第一个onClickListener中的RecyclerView个项目的Fragment操作:

private fun startEditNoteFragment(view: View) {
            val action = LibraryFragmentDirections.actionEditNote()
            val extras = FragmentNavigatorExtras(view to view.transitionName)

            findNavController().navigate(action, extras)
        }

注意:我尝试使用目标Fragment ID而不是action,还尝试使动作从none过渡到其他动画。什么都没用。

这是编辑Fragment(我们正在过渡到的布局):

<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent" 
        android:layout_height="match_parent">

    <com.ink.edit.drawing.view.PathRenderingView
            android:id="@+id/pathRenderingView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:transitionName="@string/library_item_transition"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

这是Fragment中的转换代码:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
    }

注意:我也尝试过在postponeEnterTransition()中进行onCreate,在startPostponedEnterTransition()中进行onCreateView,但仍然没有任何反应。

我正在使用Android 9在Pixel 3上进行测试,该项目的minSdkVersion是21,buildToolsVersion是28.0.3。导航库依赖项为navigation-fragment-ktx:2.0.0navigation-ui-ktx:2.0.0


谁能告诉我我做错了什么或想念什么?

1 个答案:

答案 0 :(得分:0)

过渡名称在视图层次结构上必须唯一,并且看起来您要添加许多具有相同过渡名称的元素(与“回收者”视图中的项目一样多)