【发布时间】:2017-06-30 07:26:47
【问题描述】:
您好,我正在 JSONArray 中获取数据:
{ "chatArray": [
{
"msg_id": "193",
"user_id": "15235",
"first_name": "Vishal",
"user_name": "vishal13",
"message": "twilio",
"chat_time": "2017-06-30 11:28:00"
},
{
"msg_id": "192",
"user_id": "15321",
"first_name": "Rohit",
"user_name": "rohit12",
"message": "how are you?",
"chat_time": "2017-06-30 11:28:00"
}]}
我在RecyclerView 中显示完整的数据,现在我的要求是我想显示他们上面的日子的标题,比如whatsapp。
public ChatScreenAdapter(Activity con, List<EquityDetails> list, String senderImage, String receiverImage) {
this.items = list;
this.context = con;
this.senderImage = senderImage;
this.receiverImage = receiverImage;
this.arraylist = new ArrayList<EquityDetails>();
this.arraylist.addAll(items);
if (con != null) {
typeface_normal = Typeface.createFromAsset(con.getAssets(), "fonts/arial_regular.ttf");
share = context.getSharedPreferences("quiz_sharePrefs", 0);
login_checked = share.getBoolean("ConfirmLogin", false);
if (login_checked) {
user_id = share.getInt("user_id", 0);
}
}
}
public static int getTimeRemaining(long timeStamp) {
Calendar sDate = toCalendar(timeStamp);
Calendar eDate = toCalendar(System.currentTimeMillis());
// Get the represented date in milliseconds
long milis1 = sDate.getTimeInMillis();
long milis2 = eDate.getTimeInMillis();
// Calculate difference in milliseconds
long diff = Math.abs(milis2 - milis1);
return (int) (diff / (24 * 60 * 60 * 1000));
}
private static Calendar toCalendar(long timestamp) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timestamp);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.advisory_left_side_chat_screen, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final EquityDetails itemList = items.get(position);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
Glide.with(context).load(Constants.Profile_images + "" + senderImage).asBitmap().centerCrop().placeholder(R.drawable.default_usr).into(new BitmapImageViewTarget(holder.userImageViewRight) {
@Override
protected void setResource(Bitmap resource) {
RoundedBitmapDrawable circularBitmapDrawable =
RoundedBitmapDrawableFactory.create(context.getResources(), resource);
circularBitmapDrawable.setCircular(true);
holder.userImageViewRight.setImageDrawable(circularBitmapDrawable);
}
});
Glide.with(context).load(receiverImage + "").asBitmap().centerCrop().placeholder(R.drawable.default_usr).into(new BitmapImageViewTarget(holder.userImageViewLeft) {
@Override
protected void setResource(Bitmap resource) {
RoundedBitmapDrawable circularBitmapDrawable =
RoundedBitmapDrawableFactory.create(context.getResources(), resource);
circularBitmapDrawable.setCircular(true);
holder.userImageViewLeft.setImageDrawable(circularBitmapDrawable);
}
});
if (Integer.parseInt(itemList.getId()) == user_id) {
holder.leftSideLayout.setVisibility(View.GONE);
holder.rightSideLayout.setVisibility(View.VISIBLE);
holder.messageTextViewRight.setText(itemList.getReviews_message() + "");
holder.nameTextViewRight.setText(itemList.getName());
holder.timeTvRight.setText(parseDateToddMMyyyy(itemList.getCreated_time()));
} else {
holder.leftSideLayout.setVisibility(View.VISIBLE);
holder.rightSideLayout.setVisibility(View.GONE);
holder.messageTextViewLeft.setText(itemList.getReviews_message() + "");
holder.nameTextViewLeft.setText(itemList.getName());
holder.timeTvLeft.setText(parseDateToddMMyyyy(itemList.getCreated_time()));
}
long previousTs = 0;
if (position > 1) {
if (getTimeRemaining(parseDay(itemList.getCreated_time())) == 0)
holder.dayTextView.setText("Today");
else if (getTimeRemaining(parseDay(itemList.getCreated_time())) == 1)
holder.dayTextView.setText("Yesterday");
else
holder.dayTextView.setText("convert the date and show");
}
}
public long parseDay(String time) {
// Make a Calendar whose DATE part is some time yesterday.
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.DATE, -1);
String inputPattern = "yyyy-MM-dd HH:mm:ss";
String outputPattern = "dd MM";
SimpleDateFormat inputFormat = new SimpleDateFormat(inputPattern);
Date date = null;
String str = null;
Date d = null;
try {
date = inputFormat.parse(time);
if (date.before(cal.getTime())) {
// myDate must be yesterday or earlier
SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern);
str = outputFormat.format(date);
d = outputFormat.parse(str);
} else {
// myDate must be today or later
SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern);
str = outputFormat.format(date);
d = outputFormat.parse(str);
}
} catch (ParseException e) {
e.printStackTrace();
}
return d.getTime();
}
public String parseDateToddMMyyyy(String time) {
// Make a Calendar whose DATE part is some time yesterday.
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.DATE, -1);
String inputPattern = "yyyy-MM-dd HH:mm:ss";
String outputPattern = "dd MMM";
SimpleDateFormat inputFormat = new SimpleDateFormat(inputPattern);
Date date = null;
String str = null;
try {
date = inputFormat.parse(time);
/* if (date.before(cal.getTime())) {
// myDate must be yesterday or earlier
SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern);
str = outputFormat.format(date);
} else {*/
// myDate must be today or later
outputPattern = "hh:mm aa";
SimpleDateFormat outputFormat = new SimpleDateFormat(outputPattern);
str = outputFormat.format(date);
//}
} catch (ParseException e) {
e.printStackTrace();
}
return str.toUpperCase();
}
@Override
public int getItemCount() {
return items.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private RelativeLayout leftSideLayout;
private RelativeLayout topLayoutLeft;
private ImageView userImageViewLeft;
private TextView nameTextViewLeft;
private TextView staticTextViewLeft;
private TextView messageTextViewLeft;
private TextView timeTvLeft;
private RelativeLayout rightSideLayout;
private RelativeLayout topLayoutRight;
private ImageView userImageViewRight;
private TextView nameTextViewRight;
private TextView staticTextViewRight;
private TextView messageTextViewRight;
private TextView timeTvRight;
private TextView dayTextView;
public MyViewHolder(View view) {
super(view);
leftSideLayout = (RelativeLayout) view.findViewById(R.id.left_side_layout);
topLayoutLeft = (RelativeLayout) view.findViewById(R.id.top_layout_left);
userImageViewLeft = (ImageView) view.findViewById(R.id.user_image_view_left);
nameTextViewLeft = (TextView) view.findViewById(R.id.name_textView_left);
staticTextViewLeft = (TextView) view.findViewById(R.id.static_textView_left);
messageTextViewLeft = (TextView) view.findViewById(R.id.message_textView_left);
timeTvLeft = (TextView) view.findViewById(R.id.time_tv_left);
rightSideLayout = (RelativeLayout) view.findViewById(R.id.right_side_layout);
topLayoutRight = (RelativeLayout) view.findViewById(R.id.top_layout_right);
userImageViewRight = (ImageView) view.findViewById(R.id.user_image_view_right);
nameTextViewRight = (TextView) view.findViewById(R.id.name_textView_right);
staticTextViewRight = (TextView) view.findViewById(R.id.static_textView_right);
messageTextViewRight = (TextView) view.findViewById(R.id.message_textView_right);
timeTvRight = (TextView) view.findViewById(R.id.time_tv_right);
dayTextView = (TextView) view.findViewById(R.id.day_textView);
nameTextViewLeft.setTypeface(typeface_normal);
nameTextViewRight.setTypeface(typeface_normal);
messageTextViewLeft.setTypeface(typeface_normal);
messageTextViewRight.setTypeface(typeface_normal);
timeTvLeft.setTypeface(typeface_normal);
timeTvRight.setTypeface(typeface_normal);
dayTextView.setTypeface(typeface_normal);
dayTextView.setVisibility(View.GONE);
}
}
但是这里dayTextView 显示在每个项目的上方,而不是根据日期。我只想在相应消息的顶部显示每个日期一次。
【问题讨论】:
-
您可以使用节标题回收器视图:github.com/IntruderShanky/…
-
将日期与以前的记录进行比较可能会对您有所帮助。我的意思是如果当前记录的日期和以前的记录相同,则隐藏当前记录的日期,否则显示它。
-
@RaviRupareliya 好的,我现在正在显示它,但是日期被跳过了一项。
-
@AnshulTyagi 你可能会通过调试得到一些东西,因为我从来没有尝试过,我只是在想这个逻辑它应该可以工作
-
@RaviRupareliya 我现在已经修复了所有问题,没有使用任何额外的布局或库
标签: android android-recyclerview