我RecyclerView不打电话onCreateViewHolder,onBindViewHolder即使是MenuViewHolder构造函数,因此没有出现RecyclerView.我把日志用于调试,没有显示日志.可能是什么问题?
我的适配器:
public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> {
private LayoutInflater inflater;
List<Menu> data = Collections.emptyList();
public MenuAdapter(Context context, List<Menu> data) {
Log.i("DEBUG", "Constructor");
inflater = LayoutInflater.from(context);
Log.i("DEBUG MENU - CONSTRUCTOR", inflater.toString());
this.data = data;
for(Menu menu: this.data){
Log.i("DEBUG MENU - CONSTRUCTOR", menu.menu);
}
}
@Override
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.row_menu, parent, false);
MenuViewHolder holder = new MenuViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MenuViewHolder …Run Code Online (Sandbox Code Playgroud) 我的问题id直接与@Richard有关,在RecyclerView.Adapter中关于onBindViewHolder()方法的问题没有被调用,因为他(和我)期望它这样做.
我注意到这个方法被正确调用,直到我的数据集结束(9个CardViews,向下滚动),但是当我尝试返回(向上滚动)时,它不再被调用.真正的问题是,在那里我在数据集中进行了更改并调用了notifyDataSetChanged(),但是由于这种奇怪的(对我来说)行为,我的修改不应该发生.
我附上的图片想要澄清:

我认为这是理查德在他的问题中遇到的完全相同的问题,我尝试了他完全相同的解决方案:我在我的Adapter的构造函数中强制setHasStableIds()为true,
public CardAdapter(List<Object> items){
this.items = items;
adapterList = new ArrayList<String>();
formAdapt = new ConjFormAdapter(adapterList);
itemMap = new HashMap<Object, Long>();
setHasStableIds(true);
}
Run Code Online (Sandbox Code Playgroud)
其中itemMap是我在我的活动中实现的Map,用于设置我的数据集的唯一ID,
并以这种方式覆盖getItemId():
public long getItemId(int position) {
Object item = items.get(position);
return itemMap.get(item);
}
Run Code Online (Sandbox Code Playgroud)
但是你可以从图片中看到我仍然得到这个结果:好吗?
我的活动中itemMap的实现:
for(int i=0, j=0; i<conj_items.size(); i++, j++)
conjAdapter.getItemMap().put(conj_items.get(i), (long) j);
Run Code Online (Sandbox Code Playgroud)
其中conj_items是我传递给适配器的ArrayList.
android android-viewholder android-cardview recycler-adapter android-recyclerview