0

私が満たそうとしている要件の例を挙げましょう。(ばかげた質問で申し訳ありませんが、私の脳は今少し揚げられており、私は自分でこれに取り組んでいます)

ListView でコンテンツを表示するために使用している CursorAdapter (バックエンドに SQLite を使用) があります。私が表示しているリスト項目のフィールドの 1 つは、項目が L​​istview に追加された日付です。そう...

場合:

今日が 2013 年 12 月 31 日で、リスト アイテムを作成したばかりの場合、「今日」と表示したいと思います。2014 年 1 月 1 日に、日付を「昨日」に変更したいと思います。最後に、2014 年 1 月 2 日に日付を「2013 年 12 月 31 日」に変更したいと思います

これらの要件を満たすためのシンプルまたは最もエレガントな方法は何ですか? リストビュー全体の日付を常にチェックしたり、CPU に意地悪したりしたくありません。日付を保存するベストプラクティスに関するアイデアも大歓迎です!

ありがとう!

4

1 に答える 1

0

私はそれが機能していると思います... リストビューがあるアクティビティでこのメソッドを使用し、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()
        }
于 2013-08-25T11:45:48.773 に答える