Совместное использование элемента в окне реселлера и на панели инструментов - PullRequest
0 голосов
/ 03 июля 2018

У меня странное поведение с общими элементами, и я не знаю, происходит ли это из-за неправильного понимания общего элемента или из-за плохой реализации. Я посмотрел на Google, и никто, похоже, не страдает от этой проблемы.

Позвольте мне объяснить. У меня есть два Фрагмента , Фрагмент A содержит RecyclerView , Фрагмент B - это подробный вид элементов, относящихся к программе утилизации. Оба имеют пользовательскую панель инструментов, содержащую TextView .

Я хотел бы поделиться текстовым представлением элементов в представлении реселлера в A с текстовым представлением панели инструментов B . В настоящее время переход элемента ввода общего ресурса работает ( A -> B ), но не работает по-другому ( A * 1026). * <- <em>B ).

Во время обратного перехода текстовое представление панели инструментов B остается на панели инструментов и исчезает при обратном переходе B . Но переход элемента общего ресурса работает, и в верхней части окна повторного просмотра A появляется другое текстовое представление, которое выполняет свою работу.

Там это проблема. После onBackPressed текстовое представление панели инструментов больше не передается, и копия этого текстового представления панели инструментов создается и анимируется (только в обзоре реселлера, он не поступает с панели инструментов) вместо того, чтобы делиться текстовым представлением панели инструментов B для A Пункт утилизации

Я не понимаю, в чем проблема. Имена переходов хороши, иначе анимация не может работать. Любая идея? (Я кодирую под Kotlin)

FragmentActivity

override fun onBackPressed() {
    if(supportFragmentManager.backStackEntryCount > 1){
        supportFragmentManager.popBackStackImmediate()
    } else {
        super.onBackPressed()
    }
}

Фрагмент А адаптера ViewHolder

class AnimationRecyclerViewHolder(val view: View, val listener: AnimationRecyclerCallBack) : RecyclerView.ViewHolder(view) {

    val text: TextView = view.animation_recycler_text

    fun bind(data: AnimationRecyclerData) {
        text.text = data.description
        text.transitionName = "textTransitionName$layoutPosition"
        view.setOnClickListener {
            listener.callback(data, view)
        }
    }
}

Фрагмент A

override fun callback(data: AnimationRecyclerData, view: View) {
    val frag = AnimationPageFragment.newInstance(data.type, this)
    val transac =  activity!!.supportFragmentManager.beginTransaction()
    transac.shareText(view.animation_recycler_text, context!!, this, frag)
    transac.replace(activity!!.fragContainerCatalogue.id, frag).addToBackStack(null).commit()
}

метод shareText

fun FragmentTransaction.shareText(textview: TextView, context: Context, currentFrag: AbstractAnimationFragment, nextFrag: AbstractAnimationFragment) : FragmentTransaction {

    val sharedTransitionName = textview.transitionName
    val bundle = nextFrag.arguments ?: Bundle()

    bundle.putString("sharedTransitionKey", sharedTransitionName)
    bundle.putString("nextTitle", textview.text.toString())
    nextFrag.arguments = bundle
    nextFrag.enterTransition = Fade()
    nextFrag.sharedElementEnterTransition = nextFrag.createShareTransition(sharedTransitionName, currentFrag.context!!)

    currentFrag.activity!!.window.sharedElementsUseOverlay = false
    return this.addSharedElement(textview, sharedTransitionName)
}

Фрагмент B

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

    var rootView = inflater.inflate(R.layout.animation_page_fragment_content, container, false)

    toolbar = inflatedView.findViewById(R.id.toolbarShared)
    titleToolbar = inflatedView.findViewById(R.id.toolbarTitleShared)

    toolbar.setBackgroundColor(Color.RED)
    titleToolbar.textSize = 25f
    titleToolbar.setTextColor(Color.BLACK)

    val bundle = this.arguments ?: Bundle()
    val transitionName = bundle.getString("sharedTransitionKey")
    val titleName = bundle.getString("nextTitle")
    titleToolbar.text = titleName
    titleToolbar.transitionName = transitionName
    activity!!.window.sharedElementsUseOverlay = true

    sharedElementEnterTransition = createShareTransition(titleToolbar.transitionName, context!!)

    return rootView
}

1 Ответ

0 голосов
/ 03 июля 2018

Я нашел решение.

Проблема действительно была связана с моим RecyclerView . Я никогда не говорил, что когда я появляюсь, мое мнение о переработчике тоже было оживленным. У меня была анимация ввода, когда появляется окно реселлера, и анимация, когда пользователь прокручивает. Я отключил оба, и это работало правильно. Теперь мне нужно найти способ отключить анимацию RecyclerView по возвращении, и все будет хорошо.

Спасибо тем, кто прочитал меня и попытался мне помочь.

Код, который я использовал для решения моей проблемы:

frag.setEnterSharedElementCallback(object : SharedElementCallback() {
        override fun onSharedElementEnd(sharedElementNames: MutableList<String>?, sharedElements: MutableList<View>?, sharedElementSnapshots: MutableList<View>?) {
            super.onSharedElementEnd(sharedElementNames, sharedElements, sharedElementSnapshots)
            viewAdapter.mApplyAnim = true
        }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...