RecyclerView不显示第二个插入的项目

时间:2016-06-28 07:00:20

标签: android android-recyclerview

我正在使用RecyclerView并使用只有一个textView的自定义行,在第一次调用Adapter时,textView在onBindViewHolder中正确设置,第二次插入onBindViewHolder成功调用,并且要设置的文本也可用但是当我在textview上设置了text,它在recyclerview上显示一个空白行。它将占用文本的空间但不显示文本,在进一步插入时会发生同样的事情,任何想法为什么会发生这种情况?

public class MessagesAdapter extends RecyclerView.Adapter<MessagesAdapter.ViewHolder> {
private ArrayList<MessagesData> mDataset;
private Context context;
public MessagesAdapter(Context context, ArrayList<MessagesData> myDataset) {
    this.mDataset=myDataset;
    this.context=context;
}

public class ViewHolder extends RecyclerView.ViewHolder {
    // each data item is just a string in this case
    public TextView textViewMsg;
    public TextView textViewDay;
    public TextView textViewTime;

    public ViewHolder(View view) {
        super(view);
        textViewMsg = (TextView) view.findViewById(R.id.mes);
    }
}


// Create new views (invoked by the layout manager)
@Override
public MessagesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                  int viewType) {
    // create a new view
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.mesage, parent, false);
    // set the view's size, margins, paddings and layout parameters

    ViewHolder vh = new ViewHolder(v);
    return vh;
}

// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {

    Log.d("here",mDataset.get(position).getMessage());
    holder.textViewMsg.setText(mDataset.get(position).getMessage());

}

// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
    return mDataset.size();

}
}

登录onBindViewHolder会在每次插入时显示正确的结果,但不会设置第二次插入的文本。

在这张图片中,你好,你是我发送的第一封邮件,之后我发了三条消息,因此第一条消息下方留空了。

In this Image ,Hi how are you was the first message I sent, after that I sent three messages hence the blank space below the first message

2 个答案:

答案 0 :(得分:0)

在将新项目插入RecyclerView后,尝试在适配器上使用 notifyDataSetChanged()

答案 1 :(得分:0)

对于这个愚蠢的问题感到抱歉,正如@sanoop在评论中说的那样,我只需将所有消息滚动到现在。