方法一 :让不同holder继承于一个抽象Holder(最好设置泛型 这样可以为不同holder赋不同类型的数据)
如下
import android.view.View;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapplication.date.FeedDate;
public abstract class BaseHolder<T> extends RecyclerView.ViewHolder{
public BaseHolder(@NonNull View itemView) {
super(itemView);
}
public abstract void bindData(T feedDate);
}
adapter中
@Override
public BaseHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case FeedDate.VIEW_TYPE_IMAGE:
return new FeedHolder2(LayoutInflater.from(mContext).inflate(R.layout.feed_item_image, parent, false));
case FeedDate.VIEW_TYPE_VIDEO:
return new FeedHolder(LayoutInflater.from(mContext).inflate(R.layout.feed_item_video, parent, false));
default:
return new FeedHolder(LayoutInflater.from(mContext).inflate(R.layout.feed_item_video, parent, false));
}
}
@Override
public void onBindViewHolder(BaseHolder holder, int position) {
holder.bindData(feedList.get(position));//如果不同holder需要传入的参数相同 那么仅此一行即可
}
方法二: 直接强转
if (holder instanceof FeedHolder) {
((FeedHolder) holder).bindData(feedList.get(position));
} else if (holder instanceof FeedHolder2) {
((FeedHolder2) holder).bindData(feedList.get(position));
}