如何为适配器添加时间戳

时间:2019-04-09 19:17:12

标签: android

我正在尝试创建聊天气泡,我需要在每个气泡中插入时间戳,我有适配器来插入消息,但是我不知道如何添加时间戳,有人可以告诉我怎么做。

以下是MainActivity代码:

public class MainActivity extends AppCompatActivity {

private ListView listView;
private View btnSend;
private EditText editText;
boolean myMessage = true;
private List<ChatBubble> ChatBubbles;
private ArrayAdapter<ChatBubble> adapter;

private TextView dateTimeTx;
private TextView dateTimeRx;
private String dateTime;
private String timestamp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ChatBubbles = new ArrayList<>();

    listView = (ListView) findViewById(R.id.list_msg);
    btnSend = findViewById(R.id.btn_chat_send);
    editText = (EditText) findViewById(R.id.msg_type);

    //set ListView adapter first
    adapter = new MessageAdapter(this, R.layout.tx_chat_bubble, ChatBubbles);
    listView.setAdapter(adapter);

    //event for button SEND
    btnSend.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (editText.getText().toString().trim().equals("")) {
                Toast.makeText(MainActivity.this, "Please input some text...", Toast.LENGTH_SHORT).show();
            } else {
                //add message to list

                ChatBubble ChatBubble = new ChatBubble(editText.getText().toString(), myMessage, timestamp.toString() );

                ChatBubbles.add(ChatBubble);
                adapter.notifyDataSetChanged();
                editText.setText("");
                if (myMessage) {
                    myMessage = false;
                } else {
                    myMessage = true;
                }
            }
        }
    });
 }
}

但是我有一个错误:

ChatBubble ChatBubble = new ChatBubble(editText.getText().toString(), myMessage, timestamp.toString() );

这是mi适配器代码:

public class MessageAdapter extends ArrayAdapter<ChatBubble> {
private Activity activity;
private List<ChatBubble> messages;
private String dateTime;
private SimpleDateFormat simpleDateFormat ;

public MessageAdapter(Activity context, int resource, List<ChatBubble> objects) {
    super(context, resource, objects);
    this.activity = context;
    this.messages = objects;

    String isoDatePattern = "dd/MM/yyyy  HH:mm";
    simpleDateFormat = new SimpleDateFormat(isoDatePattern);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    int layoutResource = 0; // determined by view type
    ChatBubble ChatBubble = getItem(position);
    int viewType = getItemViewType(position);

    if (ChatBubble.myMessage()) {
        layoutResource = R.layout.tx_chat_bubble;
    } else {
        layoutResource = R.layout.rx_chat_bubble;
    }

    if (convertView != null) {
        holder = (ViewHolder) convertView.getTag();
    } else {
        convertView = inflater.inflate(layoutResource, parent, false);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
    }
    //set message content
    holder.msg.setText(ChatBubble.getContent());
    holder.dateTimeTx.setText(ChatBubble.getTimestamp());
    return convertView;
}

@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public int getItemViewType(int position) {
    return position % 2;
}

private class ViewHolder {
    private TextView msg;
    private TextView dateTimeTx;
    public ViewHolder(View v) {
        msg = (TextView) v.findViewById(R.id.txt_msg);
        dateTimeTx = (TextView) v.findViewById(R.id.time_msg);
    }
}

private String readFechaActual(long timestamp){
    return simpleDateFormat.format(new Date(timestamp));
 }
}

但是我还有另一个错误:

holder.dateTimeTx.setText(ChatBubble.getTimestamp());

这是ChatBubble类:

public class ChatBubble {

private String content;
private boolean myMessage;
private long timestamp;

public ChatBubble(String content, boolean myMessage, long timestamp) {
    this.content = content;
    this.myMessage = myMessage;
    this.timestamp = timestamp;
}

public String getContent() {
    return content;
}

public boolean myMessage() {
     return myMessage;
}

public long getTimestamp() {
    return timestamp;
 }
}

3 个答案:

答案 0 :(得分:2)

  1. 在适配器构造函数中创建一个(以避免使用未使用资源)SimpleDateFormat
private SimpleDateFormat simpleDateFormat ;

public MessageAdapter(Activity context, int resource, List<ChatBubble> objects) {
    super(context, resource, objects);
    this.activity = context;
    this.messages = objects;

    String isoDatePattern = "dd/MM/yyyy  HH:mm";
    simpleDateFormat = new SimpleDateFormat(isoDatePattern);
}
  1. 更新helper方法以返回格式化的日期字符串:
private String readFechaActual(long timestamp){
    return simpleDateFormat.format(new Date(timestamp));
  }
}
  1. getView中使用它:
    //set message content
    holder.msg.setText(ChatBubble.getContent());
    holder.dateTimeTx.setText("" + ChatBubble.getTimestamp());  // <--- ADD HERE
  1. 适配器仅连接View和Model,但实际数据保留在模型中,因此您应更改BubbleChat类并添加timestamp字段:
public class ChatBubble {

private String content;
private boolean myMessage;
private long timestamp;

public ChatBubble(String content, boolean myMessage, long timestamp) {
    this.content = content;
    this.myMessage = myMessage;
    this.timestamp = timestamp;
}

public String getContent() {
    return content;
}

public boolean myMessage() {
    return myMessage;
 }

public long getTimestamp() {
  return timestamp;
}
}

答案 1 :(得分:0)

您应该在using Prism.Navigation.TabbedPages; async void SelectTab(object parameters) { var result = await _navigationService.SelectTabAsync("Tab3"); } 中设置时间,就像设置气泡消息一样。 您已经在getView中有了该字段。

此外,ViewHolder应该是ChatBubble ChatBubble = getItem(position);

请使用RecyclerView

答案 2 :(得分:0)

创建模型

public class TimeDifference {
    int years;
    int months;
    int days;
    int hours;
    int minutes;
    int seconds;
    String differenceString;

    public TimeDifference(Context mContext, Date curdate, Date olddate) {
        String y  = " "+mContext.getString(R.string.year);
        String ys = " "+mContext.getString(R.string.years);
        String m  = " "+mContext.getString(R.string.month);
        String ms = " "+mContext.getString(R.string.months);
        String d  = " "+mContext.getString(R.string.day);
        String ds = " "+mContext.getString(R.string.days);
        String h  = " "+mContext.getString(R.string.hour);
        String hs = " "+mContext.getString(R.string.hours);
        String mm = " "+mContext.getString(R.string.minute);
        String mms= " "+mContext.getString(R.string.minutes);
        String s  = " "+mContext.getString(R.string.second);
        String ss = " "+mContext.getString(R.string.seconds);
        String a  = " "+mContext.getString(R.string.ago);

        float diff=curdate.getTime() - olddate.getTime();
        if (diff >= 0) {
            int yearDiff = Math.round( ( diff/ (365l*2592000000f))>=1?( diff/ (365l*2592000000f)):0);
            if (yearDiff > 0) {
                years = yearDiff;
                setDifferenceString(years + (years == 1 ? y : ys) + a);
            } else {
                int monthDiff = Math.round((diff / 2592000000f)>=1?(diff / 2592000000f):0);
                if (monthDiff > 0) {
                    if (monthDiff > 11)
                        monthDiff = 11;

                    months = monthDiff;
                    setDifferenceString(months + (months == 1 ? m : ms) + a);
                } else {
                    int dayDiff = Math.round((diff / (86400000f))>=1?(diff / (86400000f)):0);
                    if (dayDiff > 0) {
                        days = dayDiff;
                        if(days==30)
                            days=29;
                        setDifferenceString(days + (days == 1 ? d : ds) + a);
                    } else {
                        int hourDiff = Math.round((diff / (3600000f))>=1?(diff / (3600000f)):0);
                        if (hourDiff > 0) {
                            hours = hourDiff;
                            setDifferenceString( hours + (hours == 1 ? h : hs) + a);
                        } else {
                            int minuteDiff = Math.round((diff / (60000f))>=1?(diff / (60000f)):0);
                            if (minuteDiff > 0) {
                                minutes = minuteDiff;
                                setDifferenceString(minutes + (minutes == 1 ? mm : mms) + a);
                            } else {
                                int secondDiff =Math.round((diff / (1000f))>=1?(diff / (1000f)):0);
                                if (secondDiff > 0)
                                    seconds = secondDiff;
                                else
                                    seconds = 1;
                                setDifferenceString(seconds + (seconds == 1 ? s : ss) + a);
                            }
                        }
                    }

                }
            }

        }

    }
    public String getDifferenceString() {
        return differenceString;
    }

    public void setDifferenceString(String differenceString) {
        this.differenceString = differenceString;
    }
    public int getYears() {
        return years;
    }

    public void setYears(int years) {
        this.years = years;
    }

    public int getMonths() {
        return months;
    }

    public void setMonths(int months) {
        this.months = months;
    }

    public int getDays() {
        return days;
    }

    public void setDays(int days) {
        this.days = days;
    }

    public int getHours() {
        return hours;
    }

    public void setHours(int hours) {
        this.hours = hours;
    }

    public int getMinutes() {
        return minutes;
    }

    public void setMinutes(int minutes) {
        this.minutes = minutes;
    }

    public int getSeconds() {
        return seconds;
    }

    public void setSeconds(int seconds) {
        this.seconds = seconds;
    }

}

创建Utils.java并将其添加

public static Date getDefaultDate(){
    SimpleDateFormat f = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
    SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
    f.setTimeZone(TimeZone.getDefault());
    Date nowDate = new Date();
    try {
        nowDate = dateFormatter.parse(f.format(new Date()));
    }catch (ParseException e){
        e.printStackTrace();
    }
    return nowDate;
}

public static Date newDate(String timeStamp){
        Date OurDate = null;

        try{
            SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
            formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
            Date value = formatter.parse(timeStamp);

            SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
            dateFormatter.setTimeZone(TimeZone.getDefault());
            String n = dateFormatter.format(value);
            OurDate = dateFormatter.parse(n);
        }catch (ParseException e){
            e.printStackTrace();
        }
        return OurDate;
    }

将日期传递到适配器

TimeDifference now = new TimeDifference(mContext,Utils.getDefaultDate(),Utils.newDate("Your current time");
Toast.makeText(context, "Posted by "+now.getDifferenceString(), Toast.LENGTH_SHORT).show();