Интерфейс между утилитой просмотра и обзором - PullRequest
0 голосов
/ 22 февраля 2020

Итак, у меня есть Recyclerview и несколько пользователей. Теперь один из моих виджетов содержит элемент с несколькими анимациями. Теперь, если пользователь нажимает на элемент активности, открывается, и у меня нет контроля над действием, единственный способ, которым я узнал, - это обратный вызов в моем фрагменте, т.е. onPause & onResume. Я хочу позвонить animation.onResume(), как только мой фрагмент onResume() будет вызван.

Класс интерфейса

interface CustomTabClosedListener {
        fun onCustomTabClosed()
    }

Адаптер Соответствующий код:

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
   lateinit var viewViewHolder: RecyclerView.ViewHolder
   val layoutInflater = LayoutInflater.from(context)
   val view = layoutInflater!!.inflate(R.layout.feed_coverage, parent, false)
                viewViewHolder = CoverageViewHolder(view)
                listener = viewViewHolder
}

, где слушатель private var listener: CustomTabClosedListener?=null

ViewHolder

class CoverageViewHolder(val view: View) :CustomTabClosedListener {

override fun onCustomTabClosed() {
    animation?.resume()

Теперь мой фрагмент вызывает этот метод адаптера в onResume -

fun customTabClosed() {
    listener?.onCustomTabClosed()
 }

Но здесь мой слушатель получает null, и я не знаю причину Почему. Как я могу вызвать мой метод в viewholder через мой адаптер / фрагмент? Есть ли другой лучший подход?

1 Ответ

0 голосов
/ 22 февраля 2020

Я полагаю, что причина, по которой вы получаете ноль, заключается в том, что у вас должен быть только один обратный вызов в Adapter viewHolder, и вся анимация должна управляться представлением. Лучше и понятнее, если адаптер управляет некоторыми действительно элементарными бизнес-логиками c, оставляя то, что должно происходить с представлением, в самом представлении.

Допустим, у вас есть файл xml с вашей анимацией, который вы могли бы получить из представления элемента управления, чтобы уведомить адаптер и запустить анимацию

fun IamACoolCallBack(){

 AnimationUtils.loadLayoutAnimation(context, R.anim.layout_animation_fall_down);
with(recyclerView){
    setLayoutAnimation(controller);
    getAdapter().notifyDataSetChanged();
    scheduleLayoutAnimation();
 }
}

РЕДАКТИРОВАТЬ Я нашел это учебник выглядит довольно аккуратно для меня

...