在回收站视图中检测上一个项目

时间:2017-11-11 18:44:16

标签: android android-recyclerview recycler-adapter

我有一个名为(messages)的模型类。在回收器视图适配器的绑定视图持有者方法中,我这样做是为了从(消息)类中提取(时间)字符串:

@override
public void onBindViewHolder(final ViewHodler view holder, int position){

  //here I extract the time value from (messages) class

  messages mess=messageslist.get(position);

  //I store it in a long variable called time

  long time= mess.getTime();


 }

在此之前,我只在Recycler视图中获取每个项目的时间值。但是我也希望得到上一个项目的时间并将其与下一个项目进行比较。

换句话说,我试图找出recyclerview中每两项之间的时间差异。

感谢您的帮助。

修改

好的我想要做的是显示或隐藏日期视图,如果两个项目之间的日期差异达到或超过1天。如果我根据下面的答案这样做,我就没有结果......就像这样

    //the time of the item
    long time= mess.getTime();

     //the time of the previous item according to the answers below

    long pre_time=messageslist.get(position-1).getTime();


     //now I compare the difference 


      if(time - pre_time >= 24*3600*1000){ 

         //show date
       }else{
         //hide date
        }

但是做得很好。

3 个答案:

答案 0 :(得分:1)

messages mess = messageslist.get(position);
if (position > 0){
    long time_diffrence = mess.getTime() - messageslist.get(position-1).getTime();
}

答案 1 :(得分:1)

根据更新后的问题编辑答案

您应该将时间毫秒转换为DAY_OF_MONTH,并检查当前项目的日期是否大于上一项目的日期。

Calendar calendar = Calendar.getInstance();

Messages mess = messagesList.get(position);
calendar.setTimeInMillis(mess.getTime());
int date = calendar.get(Calendar.DAY_OF_MONTH);

if (position > 0) {
    Messages previousMessage = messagesList.get(position - 1);
    if (previousMessage != null) {
        calendar.setTimeInMillis(previousMessage.getTime());
        int prevDate = calendar.get(Calendar.DAY_OF_MONTH);

        if (date > prevDate) {
            // This is a different day than the previous message, so show the Date
        } else {
            // Same day, so hide the Date
        }

    }
} else {
    // This is the first message, so show the date
}

答案 2 :(得分:0)

(1)第一步时间戳转换为Date转换思路

private String getDate(String createdDate) {
    long timestampString = Long.parseLong(createdDate);
    @SuppressLint("SimpleDateFormat") String value = new java.text.SimpleDateFormat("dd/MM/yyyy").
            format(new java.util.Date(timestampString * 1000));
    return value;
}

(2)onBindViewHolder中的第二步

    if (position == 0) {
        holder.mTextViewNewTime.setVisibility(View.VISIBLE);
        holder.mTextViewNewTime.setText(getDate(bean.getCreatedDate()));
    } else {
        String prev_date_time = getDate(mPojoTicketChatList.get(position - 1).getCreatedDate());
        //String prev_date[] = prev_date_time[0].split("-");
        if (getDate(bean.getCreatedDate()).equals(prev_date_time)) {
            holder.mTextViewNewTime.setVisibility(View.GONE);
        } else {
            holder.mTextViewNewTime.setVisibility(View.VISIBLE);
            holder.mTextViewNewTime.setText(getDate(bean.getCreatedDate()));
        }
    }

尝试为我工作

相关问题