android - 在 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;
}*/
}
解决方案
以下解决方案可能会帮助您解决问题
((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);
}
推荐阅读
- amazon-web-services - Cloudfront 是否禁用/启用有效地“使”所有文件“无效”?
- javascript - 切换到 websocket 后如何从 Binance 解析数据
- python - 基于 Tensorflow 的变压器中的输入数据错误
- c++ - wxWidgets 遍历注册表项
- php - PHP Composer:“包 paypal/paypalhttp 已被放弃”
- swift - 在 Swift 中,如果局部变量在闭包中使用,它的作用域是什么?
- python - 如何使用 sys.stdin.read() 输入一组用换行符分隔的字符串
- java - 调用 Module32First 给出无效参数(错误代码 87)
- node.js - 数据库结果到 REST PUT
- javascript - 正则表达式不捕获 JavaScript 中的组