package com.pukka.jiecheng.base; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.leanback.widget.Presenter; import com.pukka.libcore.utils.LogUtils; import java.util.List; public abstract class BasePresenter extends Presenter { /** * item 点击事件 */ protected OnItemClickListener onItemClickListener = null; public void setOnItemClickListener(OnItemClickListener onItemClickListener) { this.onItemClickListener = onItemClickListener; } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup) { // long time = System.currentTimeMillis(); View view; int layoutResId = getLayoutResId(); if (layoutResId <= 0) { view = new View(viewGroup.getContext()); } else { view = LayoutInflater.from(viewGroup.getContext()).inflate(getLayoutResId(), viewGroup, false); } ViewHolder viewHolder = createViewHolder(view); return viewHolder; } @Override public void onBindViewHolder(ViewHolder viewHolder, Object o) { } @Override public void onBindViewHolder(ViewHolder viewHolder, Object item, List payloads) { try { ((VH) viewHolder).bindViewHolderPayloads(item,payloads); if (onItemClickListener != null) { ((VH) viewHolder).view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onItemClickListener.onItemClick(viewHolder.view, (D) item); } }); } } catch (ClassCastException e) { LogUtils.e(getLogTag() + "onBindViewHolder, cast param failed. " +e); } } @Override public void onViewAttachedToWindow(ViewHolder viewHolder) { super.onViewAttachedToWindow(viewHolder); try { ((VH) viewHolder).setAttachedToWindow(true); } catch (ClassCastException e) { LogUtils.e(getLogTag() + "onViewAttachedToWindow, cast param failed." + e); } } @Override public void onViewDetachedFromWindow(ViewHolder viewHolder) { super.onViewDetachedFromWindow(viewHolder); try { ((VH) viewHolder).setAttachedToWindow(false); } catch (ClassCastException e) { LogUtils.e(getLogTag() + "onViewDetachedFromWindow, cast param failed." + e); } } @Override public void onUnbindViewHolder(ViewHolder viewHolder) { try { // long time = System.currentTimeMillis(); ((VH) viewHolder).unBindViewHolder(); // Logger.d(getLogTag(), "onUnbindViewHolder. cost: " + (System.currentTimeMillis() - time)); } catch (ClassCastException e) { LogUtils.e(getLogTag() + "onUnbindViewHolder, cast param failed." + e); } } /** * 获取布局的资源Id * * @return 布局的资源Id */ protected abstract int getLayoutResId(); /** * 创建一个ViewHolder的实例 * * @param view view对象 * @return viewHolder的实例 */ protected abstract VH createViewHolder(View view); /** * 获取日志的TAG * * @return 日志的TAG */ protected abstract String getLogTag(); public interface OnItemClickListener { void onItemClick(View view, D d); } }