У нас есть Fragment
(размещенный в Activity
), который содержит строку поиска (EditText
, обернутый CardView
). Мы хотели бы выполнить переход общего элемента с этой строкой поиска в другую активность с такой же строкой поиска вверху. Возможно, вы видели этот общий шаблон в других приложениях.
После выполнения начальной реализации прямой переход (Fragment
к Activity
) выглядит нормально и выглядит плавным. Тем не менее, когда я нажимаю кнопку «Назад», чтобы выйти из нового Activity
, анимация возврата становится довольно неудобной.
Некоторый код:
MyFragment
class MyFragment : BaseFragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate view.
val view = inflater.inflate(R.layout.my_fragment, container, false)
view.search_input.setOnClickListener {
var intent = Intent(activity, SearchActivity::class.java)
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(
activity!!,
view.search_wrapper as View,
"search"
)
activity!!.startActivity(intent, options.toBundle())
}
return view
}
}
my_fragment. xml
<ConstraintLayout>
<androidx.cardview.widget.CardView
android:id="@+id/search_wrapper"
android:transitionName="search"
android:clickable="true"
...>
<EditText
android:focusable="false"
android:cursorVisible="false"
android:inputType="none"
android:clickable="false"
... />
</androidx.cardview.widget.CardView>
</ConstraintLayout>
SearchActivity
class SearchActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_search)
}
override fun onBackPressed() {
supportFinishAfterTransition()
}
}
activity_search. xml
<androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
app:layout_constraintTop_toTopOf="parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
....>
<androidx.cardview.widget.CardView
android:id="@+id/search_wrapper"
android:transitionName="search"
...>
<EditText
android:id="@+id/search_input"
... />
</androidx.cardview.widget.CardView>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
Наконец, <item name="android:windowContentTransitions">true</item>
установлен в нашем стиле AppTheme
.
Прилагается короткое видео, демонстрирующее проблему.
Imgur
Вопросы
- Поддерживаются ли на самом деле переходы с
Fragment
на Activity
общего элемента? - Почему анимация возврата не работает и как это можно исправить?