Java Android抽象类坏魔法空指针
我为Java Android抽象类坏魔法空指针,java,android,polymorphism,Java,Android,Polymorphism,我为RecycledView编写了适配器,它使用两种类型的项。因此,ViewHolder有三个类:基类和2个它的实现 public abstract class AbstractCatalogItemViewHolder extends RecyclerView.ViewHolder { public WebImageView icon; ... public AbstractCatalogItemViewHolder(View itemView) {
RecycledView
编写了适配器,它使用两种类型的项。因此,ViewHolder有三个类:基类和2个它的实现
public abstract class AbstractCatalogItemViewHolder extends RecyclerView.ViewHolder {
public WebImageView icon;
...
public AbstractCatalogItemViewHolder(View itemView) {
super(itemView);
}
}
public class CategoryViewHolder extends AbstractCatalogItemViewHolder {
public CategoryViewHolder(View itemView) {
super(itemView);
icon = (WebImageView) itemView.findViewById(R.id.icon);
...
}
}
问题是第二个图标指向对象(WebImageView
),但第一个图标是null
。这怎么可能
@Override
public void onBindViewHolder(AbstractCatalogItemViewHolder abstractViewHolder,
final int position) {
int type = getItemViewType(position);
WebImageView icon = abstractViewHolder.icon;
WebImageView icon2 = ((CategoryViewHolder) abstractViewHolder).icon;
...
}
onCreateViewHolder:
@Override
public AbstractCatalogItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
int type = getItemViewType(i);
View v = inflater.inflate(
type == TYPE_CATEGORY ?
R.layout.item_category :
R.layout.item_product,
viewGroup, false);
return type == TYPE_CATEGORY ? new CategoryViewHolder(v) : new ProductViewHolder(v);
}
传递到
onCreateViewHolder
的int已经是itemType,请删除对onCreateViewHolder
内部的getItemViewType
的调用 你能在CreateViewHolder上显示你的方法吗?@Dreagen当然。addedy您正在调用getItemViewType(i)
,但是i
实际上是getItemViewType(position)
的结果,所以您不需要这样做。删除此呼叫并用i
替换type
,因为我看不到您的ProductViewHolder
我不知道这是否也是设置图标的原因,如果您未发布的另一个ViewHolder
未正确设置图标,可能与此有关。看不到就很难说