RecyclerView 不调用 onCreateViewHolder 或 onBindView

2024-05-12

没有收到任何错误,所有数据似乎都有效。由于某种原因,没有调用与视图相关的方法。我已确定以下事项:

  • getItemCount() 是唯一被调用的适配器方法,并且返回一个正整数值(我知道这将是你们将要查看的区域)

    • 构造函数正在被调用,成员变量有效。

    • Parent View是一个垂直的LinearLayout;没有滚动视图,或任何其他具有自己的滚动属性的视图。

    • 包含片段视图已创建并显示在屏幕上。

这是片段中的声明,后跟适配器。任何帮助将不胜感激,因为这完全令人困惑。

SubMenuAdapter adapter = new SubMenuAdapter(getActivity(), mContentItems);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);
public class SubMenuAdapter extends RecyclerView.Adapter<SubMenuAdapter.ViewHolder> {
private static final String TAG = String.format("==> %S", SubMenuAdapter.class.getSimpleName());

private final List<ContentItem> mContentItems;
private Context mContext;

public SubMenuAdapter(Context context, List<ContentItem> contenItems) {
    Log.d(TAG, "Constructor called");
    mContentItems = contenItems;
    mContext = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Log.d(TAG, "onCreateViewHolder called");
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_resource_efficiency, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Log.d(TAG, "onBindViewHolder called");

    ContentItem item = mContentItems.get(position);
    holder.textName.setText(item.getName());
    FontSetter.setMyriadProRegular(mContext, holder.textName);
    Picasso.with(mContext).load("file://" + item.getPreviewImageDefault()).into(holder.imageIcon);
}

@Override
public int getItemCount() {
    Log.d(mContext, String.format("getItemCount: %d", mContentItems.size()));
    return mContentItems.size();
}

// ViewHolder
public static class ViewHolder extends RecyclerView.ViewHolder {

    TextView textName;
    ImageView imageIcon;

    public ViewHolder(View view) {
        super(view);
        textName = (TextView) view.findViewById(R.id.tv_resource_efficiency_option);
        imageIcon = (ImageView) view.findViewById(R.id.iv_resource_efficiency_icon);
    }
}

这也可能对某人有帮助

首次使用

recyclerView.setAdapter(adapter);

进而:

recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

所以它看起来像这样:

recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

顺序颠倒了

Update:

现在我只是使用:

app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

on the RecyclerView在 XML 中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RecyclerView 不调用 onCreateViewHolder 或 onBindView 的相关文章

随机推荐