我在我的项目中使用了RecyclerView,我遇到的问题是我的RecyclerView被相同的值填充,好像这些值被覆盖在forEach
下面的onBindViewHolder
中: / p>
class ProfListAdapter extends RecyclerView.Adapter<ViewHolder>{
private LayoutInflater mLayoutInflater;
public ProfListAdapter(Context context) {
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType){
return new ViewHolder(mLayoutInflater
.inflate(R.layout.recycler_view, viewGroup, false));
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position){
System.out.println(position);
final String profName;
Integer k = 0;
for (Integer key : mData.keySet()) {
viewHolder.setData(mData.get(key));
}
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent intent = ProfPager.newIntent(getActivity(), position);
startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mData.size();
}
}
class ViewHolder extends RecyclerView.ViewHolder {
private TextView mTextView;
private ViewHolder(View itemView){
super(itemView);
mTextView = (TextView) itemView.findViewById(R.id._prof); // galleryimage
}
private void setData(String profName){
mTextView.setText(profName);
System.out.println("setData" + profName);
}
}
当我退出控制台时,我可以看到setData()
中的值正在显示正确的项目。但是,片段内显示的内容只是profName
中遇到的最后一个forEach
。什么可能导致这种行为?以下是指向整个fragment
:https://pastebin.com/xS7CSbbK
如果我使用position
,则它并不总是与存储Hashmap
SQLite
的{{1}}中的密钥一致。
答案 0 :(得分:0)
在ViewHolder上设置数据
你可能不需要在onBindViewHolder中使用for循环,而是尝试使用onBindViewHolder中可用的位置值来设置数据。干杯:)
答案 1 :(得分:0)
对于RecyclerView,为简单起见使用ArrayList
然后像这样更改你的onBindViewHolder
@Override
public void onBindViewHolder(ViewHolder viewHolder, final int position){
System.out.println(position);
viewHolder.setData(mData.get(position));
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent intent = ProfPager.newIntent(getActivity(), position);
startActivity(intent);
}
});
}
我假设mData为ArrayList