Переход от общего элемента к действию - PullRequest
0 голосов
/ 25 февраля 2020

У нас есть 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

Вопросы

  1. Поддерживаются ли на самом деле переходы с Fragment на Activity общего элемента?
  2. Почему анимация возврата не работает и как это можно исправить?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...