相关疑难解决方法(0)

如何使用Android导航组件将共享的过渡元素从RcyclerView的项目实现为Fragment?

我有一个非常简单的案例。我想在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

7
推荐指数
2
解决办法
1487
查看次数

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
查看次数