【问题标题】:Android - Setting date to RelevantDate with an CursorAdapterAndroid - 使用 CursorAdapter 将日期设置为 RelevantDate
【发布时间】:2013-08-24 06:25:17
【问题描述】:

让我举一个我试图满足的要求的例子。 (对不起,如果这是一个愚蠢的问题,但我的大脑现在有点炸,我正在自己解决这个问题)

我有一个 CursorAdapter(后端带有 SQLite),用于 ListView 显示内容。我正在显示的列表项中的字段之一是该项添加到列表视图的日期。所以...

案例:

如果今天是 2013 年 12 月 31 日,我刚刚创建了一个列表项,我希望它显示“今天”。 2014 年 1 月 1 日,我希望将日期更改为“昨天”。最后,在 2014 年 1 月 2 日,我希望将日期更改为“12/31/2013”。

满足这些要求的最简单或最优雅的方法是什么?我不想不断地检查我的整个列表视图的日期并且对 CPU 很刻薄。任何关于保存日期最佳实践的想法也将不胜感激!

谢谢!

【问题讨论】:

    标签: android android-sqlite android-cursoradapter


    【解决方案1】:

    我想我已经让它工作了......我在我的列表视图所在的活动中使用这个方法,并在每个 onCreate、onStart 和 onResume 调用它。

     public void setRelevantDate() {
        SimpleDateFormat year = new SimpleDateFormat("MM/dd/yyyy", Locale.US); 
        Date date = new Date();
        String current_date = year.format(date);
        String db_day_after_creation_date;
    
    
    
      //check dates created, sub "today" or "yesterday"
        for(SoundData s: app.unsent_recordings){
            Log.e("soundData date flag",String.valueOf(s.isAfter_Day_two()));
            Log.e("soundData date buffer",s.getDate_buffer());
            Log.e("soundData date created",s.getDate_created());
    
            if (!s.isAfter_Day_two()){ //if we are two days after the creation then we can skip all the checks for this item because
                                        // it has already been set back to the initial MM/dd/yyyy date format
            String sql_date = s.getDate_buffer();
            String db_date = sql_date.substring(0,10);
            String db_time = sql_date.substring(11);
    
            //find the day after creation date
            SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy", Locale.US);
            Calendar c = Calendar.getInstance();
            try {
                c.setTime(sdf.parse(db_date));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            c.add(Calendar.DATE, 1);
            db_day_after_creation_date = sdf.format(c.getTime());
    
    
            if (db_date.equals(current_date)){
                       s.setDate_created("Today, "+db_time);
                       app.update_Recording_DateCreated(s.getId(),"Today, "+db_time, s.getDate_buffer(), String.valueOf(s.isAfter_Day_two()));  //dateCreated = today, TIME
            }
            else if(current_date.equals(db_day_after_creation_date)){                       // basically if the current date is equal to the day after the db_created date
                       s.setDate_created("Yesterday, "+db_time);
                                                                    //we can say that it was created yesterday
                       app.update_Recording_DateCreated(s.getId(),"Yesterday, "+db_time, s.getDate_buffer(), String.valueOf(s.isAfter_Day_two()));  
    
            }
            else{
                    s.setDate_created(sql_date);
                                                            //Otherwise use normal date
                    app.update_Recording_DateCreated(s.getId(),sql_date,s.getDate_buffer(), String.valueOf(s.isAfter_Day_two()));   //dateCreated = dateBuffer
    
            }
    
                app.mCursor = app.db.getCursor();
                app.rec_adapter.changeCursor(app.mCursor);
                app.rec_adapter.notifyDataSetChanged();                                             //Update cursor, notifyDataSetChanged()
            }
    

    【讨论】:

      猜你喜欢
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多