119 lines
3.5 KiB
Java
119 lines
3.5 KiB
Java
|
|
|
||
|
|
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<VH extends BasePresenterViewHolder, D> extends Presenter {
|
||
|
|
|
||
|
|
/**
|
||
|
|
* item 点击事件
|
||
|
|
*/
|
||
|
|
protected OnItemClickListener<D> onItemClickListener = null;
|
||
|
|
|
||
|
|
public void setOnItemClickListener(OnItemClickListener<D> 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<Object> 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<D> {
|
||
|
|
void onItemClick(View view, D d);
|
||
|
|
}
|
||
|
|
}
|