在ViewHolder上设置数据

时间:2017-03-28 21:48:07

标签: android android-fragments

我在我的项目中使用了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。什么可能导致这种行为?以下是指向整个fragmenthttps://pastebin.com/xS7CSbbK

的链接

如果我使用position,则它并不总是与存储Hashmap SQLite的{​​{1}}中的密钥一致。

2 个答案:

答案 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