首页 > 解决方案 > 在 ListView 中显示日期

问题描述

对于我的大学,我必须开发一个待办事项应用程序。一个要求是,我选择的日期必须显示在 ListView 中。我找到了一个只显示当前年份的 Youtube 教程。

在这两张图片中,您可以看到我的 ListView 布局和带有一个 ToDo 的 ListView。右侧的 TextView 字段应显示截止日期。它的 ID 为 tvDueDate

在此处输入图像描述 在此处输入图像描述

我如何更改代码,它会显示我想要的方式?

这是我的代码:

((TextView) view.findViewById(R.id.tvName)).setText(currentToDo.getName());
       TextView dueDate = (TextView) view.findViewById(R.id.tvDueDate);
       ImageView fav = (ImageView) view.findViewById(R.id.favIcon);

       if(currentToDo.getDueDate() == null){
           dueDate.setVisibility(View.GONE);
       } else {
           dueDate.setVisibility(View.VISIBLE);
dueDate.setText(String.valueOf(currentToDo.getDueDate().get(Calendar.YEAR)));
       }

要添加新的 ToDo,我使用以下代码:

todo = new ToDo();
dueDate = (TextView) findViewById(R.id.dueDate);
btnAdd = (Button) findViewById(R.id.btnAdd);

btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(todo.getName() == null){
                Toast.makeText(ToDoCreateNew.this, "Please insert some value.", Toast.LENGTH_LONG).show();
                return;
            }
            ToDoDatabaseHelper.getInstance(ToDoCreateNew.this).createTodo(todo);
            finish();

我的 ToDoDatabaseHelper:

public ToDo createTodo(final ToDo todo) {
    SQLiteDatabase database = this.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put(NAME_COLUMN, todo.getName());
    contentValues.put(DUEDATE_COLUMN, todo.getDueDate() == null ? null : todo.getDueDate().getTimeInMillis() / 1000);
    contentValues.put(FAVORITE_COLUMN, todo.isFavorite() ? 1 : 0);
    contentValues.put(DESCRIPTION_COLUMN, todo.getDescription());
    contentValues.put(DUETIME_COLUMN, String.valueOf(todo.getDueTime() == null ? null : todo.getDueTime().getTime()));

    long newID = database.insert(TABLE_NAME, null, contentValues);
    database.close();
    return readToDo(newID);
}

编辑:

下面的两张图片显示了我添加具有截止日期的新 ToDo 的意图。

在此处输入图像描述 在此处输入图像描述

用户使用“单击截止日期”单击 TextView 并打开 DatePicker。

这里是选择日期的代码:

dueDate.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           Calendar calendar = Calendar.getInstance();
           int year = calendar.get(Calendar.YEAR);
           int month = calendar.get(Calendar.MONTH);
           int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);

           DatePickerDialog dialog = new DatePickerDialog(ToDoCreateNew.this,
                   android.R.style.Theme_Material_Dialog_MinWidth,
                   datePickerDialog,
                   year, month, dayOfMonth);
           ((DatePickerDialog) dialog).show();
       }
   });

   datePickerDialog = new DatePickerDialog.OnDateSetListener() {
       @Override
       public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
           dueDate.setText(String.format("%02d. %02d. %d", dayOfMonth, (month + 1), year));
       }
   };

编辑2:

public class ToDoDatabaseHelper extends SQLiteOpenHelper {
public static ToDoDatabaseHelper INSTANCE = null;

public static final String DB_NAME = "TODOS";
public static final int VERSION = 9;
public static final String TABLE_NAME = "todos";

public static final String ID_COLUMN = "ID";
public static final String NAME_COLUMN = "name";
public static final String DUEDATE_COLUMN = "duedate";
public static final String FAVORITE_COLUMN = "favorite";
public static final String DESCRIPTION_COLUMN = "description";
public static final String DUETIME_COLUMN = "duetime";

public ToDoDatabaseHelper(Context context) {
    super(context, DB_NAME, null, VERSION);
}

public static ToDoDatabaseHelper getInstance(final Context context) {
    if (INSTANCE == null) {
        INSTANCE = new ToDoDatabaseHelper(context);
    }
    return INSTANCE;
}

@Override
public void onCreate(SQLiteDatabase db) {
    String createQuery = "CREATE TABLE " + TABLE_NAME
            + "(" + ID_COLUMN + " INTEGER PRIMARY KEY, " + NAME_COLUMN + " TEXT NOT NULL,"
            + DUEDATE_COLUMN + " INTEGER DEFAULT NULL, " + FAVORITE_COLUMN + " INTEGER DEFAULT 0,"
            + DESCRIPTION_COLUMN + " TEXT DEFAULT NULL, " + DUETIME_COLUMN + " INTEGER DEFAULT NULL)";
    db.execSQL(createQuery);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String dropTable = "DROP TABLE IF EXISTS " + TABLE_NAME;
    db.execSQL(dropTable);

    onCreate(db);
}

public ToDo createTodo(final ToDo todo) {
    SQLiteDatabase database = this.getWritableDatabase();

    ContentValues contentValues = new ContentValues();
    contentValues.put(NAME_COLUMN, todo.getName());
    contentValues.put(DUEDATE_COLUMN, todo.getDueDate());
    //contentValues.put(DUEDATE_COLUMN, todo.getDueDate() == null ? null : todo.getDueDate().getTimeInMillis() / 1000);
    contentValues.put(FAVORITE_COLUMN, todo.isFavorite() ? 1 : 0);
    contentValues.put(DESCRIPTION_COLUMN, todo.getDescription());
    contentValues.put(DUETIME_COLUMN, String.valueOf(todo.getDueTime() == null ? null : todo.getDueTime().getTime()));


    long newID = database.insert(TABLE_NAME, null, contentValues);
    database.close();
    return readToDo(newID);
}

编辑3:

在此处输入图像描述

编辑4:

我的 ToDo.java 类

package model;

import java.util.Calendar;

import java.io.Serializable;

public class ToDo implements Serializable {
    private long id;
    private String name;
    private String dueDate;
    private  Calendar dueTime;
    private boolean favorite;
    private String contact;
    private String description;

    public ToDo() {
        this(null, null, null, false, null,null);
    }

    public ToDo(String name) {
        // Verschachtelt aufrufen, damit nichts vergessen wird
        this(name, null, null, false, null, null);
    }

    public ToDo(String name, String dueDate, Calendar dueTime, final boolean     favorite, String contact, String description) {
        this.name = name;
        this.dueDate = dueDate;
        this.dueTime = dueTime;
        this.favorite = favorite;
        this.contact = contact;
        this.description = description;
    }



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public Calendar getDueTime() {
        return dueTime;
    }

    public void setDueTime(Calendar dueTime) {
        this.dueTime = dueTime;
    }

    public boolean isFavorite() {
        return favorite;
    }

    public void setFavorite(boolean favorite) {
        this.favorite = favorite;
    }

    public String getContact() {
        return contact;
    }

    public void setContact(String contact) {
        this.contact = contact;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getDueDate() {
        return dueDate;
    }

    public void setDueDate(String dueDate) {
        this.dueDate = dueDate;
    }

    /*public Calendar getDueDate() {
        return dueDate;
    }

    public void setDueDate(Calendar dueDate) {
        this.dueDate = dueDate;
    }*/
}

标签: androidlistview

解决方案


以下解决方案可能会帮助您解决问题

((TextView) view.findViewById(R.id.tvName)).setText(currentToDo.getName());
   TextView dueDate = (TextView) view.findViewById(R.id.tvDueDate);
   ImageView fav = (ImageView) view.findViewById(R.id.favIcon);

   if(currentToDo.getDueDate() == null){
       dueDate.setVisibility(View.GONE);
   } else {
       dueDate.setVisibility(View.VISIBLE);
       SimpleDateFormat dateView = new SimpleDateFormat("MMM MM dd, yyyy h:mm a");
       String dateString = dateView.format(currentToDo.getDueDate());
       dueDate.setText(dateString);
   }

推荐阅读