【问题标题】:How to sort SMS message in listview android如何在listview android中对短信进行排序
【发布时间】:2020-07-01 18:29:04
【问题描述】:

您能帮我对列表视图中显示的短信进行排序吗?我使用了 SMS Broadcast Receiver,我想将新消息显示到顶部。我想我应该使用日期对项目进行排序,但我不知道如何,下面是我的示例代码和图片谢谢!

SMSReceiver.java

public static  final String SMS_BUNDLE = "pdus";
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    if(intent.getAction().equalsIgnoreCase("android.provider.Telephony.SMS_RECEIVED")) {
        if (bundle != null) {
            Object[] sms = (Object[]) bundle.get(SMS_BUNDLE);
            String smsMsg = "";
            String smsdate ="";
            SmsMessage smsMessage;
            for (int i = 0; i < sms.length; i++) {
                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
                    String format = bundle.getString("format");
                    smsMessage = SmsMessage.createFromPdu((byte[]) sms[i], format);
                }
                else {
                    smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);
                }
                String msgBody = smsMessage.getMessageBody().toString();
                Long msgDate = smsMessage.getTimestampMillis();
                
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(msgDate);
            Date finaldate = calendar.getTime();
            String smsDate = finaldate.toString();
            Calendar messageTime = Calendar.getInstance();
                smsMsg +=msgBody;
                smsdate += smsDate;
            }
                Receive_message inst = Receive_message.Instance();
                inst.receive_data(smsMsg,smsdate);
            }}}}

Receive_message.java - 活动

 public void receive_data (final String smsMsg, String smsdate) {
    arrayAdapter = new ArrayAdapter(this, R.layout.list_item, list_items);
    text_listview.setAdapter(arrayAdapter);
    arrayAdapter.add(smsMsg);
    arrayAdapter.notifyDataSetChanged();

【问题讨论】:

    标签: android


    【解决方案1】:

    尝试创建一个可以像这样轻松排序的对象。

     public static class MessageType {
    
        private String smsMsg;
        private String smsDate;
    
        public MessageType(String smsMsg, String smsDate) {
            this.smsMsg = smsMsg;
            this.smsDate = smsDate;
        }
    
        @NonNull
        @Override
        public String toString() {
            return super.toString();
        }
    
        public String getSmsMsg() {
            return smsMsg;
        }
    
        public void setSmsMsg(String smsMsg) {
            this.smsMsg = smsMsg;
        }
    
        public String getSmsDate() {
            return smsDate;
        }
    
        public void setSmsDate(String smsDate) {
            this.smsDate = smsDate;
        }
    
        public static Comparator<MessageType> ByDate = new Comparator<MessageType>() {
            @Override
            public int compare(MessageType o1, MessageType o2) {
                return o1.smsDate.compareTo(o2.smsDate);
            }
        };
    
    }
    

    把你的 ArrayList 改成这个

        ArrayList<MessageType> list_items = new ArrayList<>();
    

    并像这样更改您的接收数据

        public void receive_data (final String smsMsg, String smsDate){
    
        list_items.add(new MessageType(smsMsg,smsDate));
        Collections.sort(list_items, MessageType.ByDate);
        ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.list_item, list_items);
        text_listview.setAdapter(arrayAdapter);
        arrayAdapter.notifyDataSetChanged();
    }
    

    如果顺序相反,您可以在这里更改它

    return o1.smsDate.compareTo(o2.smsDate);
    

    到这里

    return o2.smsDate.compareTo(o1.smsDate);
    

    【讨论】:

    猜你喜欢
    • 2014-05-22
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多