这是我第一次在列表视图中处理日期。通过查看 SO 和 google,有很多关于列表视图和绑定日期的资源和示例。许多示例仅涉及日期字段,但暗示如何将它们添加到其他字段中。我要么不明白如何实现这些,要么每个人都很难,或者两者兼而有之。因此,以这种方式,我正在考虑从我在概念上所做的事情开始,然后找出我的逻辑错误或可以改进的地方,这将对其他人有所帮助。
我正在努力显示一个带有多个文本视图字段的列表视图,其中一个是格式化的日期。数据以 yyyymmdd 的形式存储在 SQLite 中,以便进行排序。(列表视图使用我的 dbadapter 中的良好查询按日期字段排序,并且工作正常)
我对列表视图的绑定日期进行了一些研究,发现我的 simplecursoradapter 无法自行工作,但我需要一个额外的 CursorAdapter 或 ViewBinder。基于此示例,我从 ViewBinder 开始,但我的字段中没有填充任何内容。需要明确的是,我所做的只是为其他领域保留了我的简单光标适配器,并且它们运行正常。然后我添加了一个连接到活页夹的附加适配器。
这是列表视图所在的活动的代码:
private void fillTasks() {
Cursor tasksCursor = mDbHelper.fetchAllTasksforBatch(mRowId);
startManagingCursor(tasksCursor);
// Create an array to specify the fields we want to display in the list
String[] from = new String[]{
VDbAdapter.COLUMN_taskid,
VDbAdapter.COLUMN_tasktype,
VDbAdapter.COLUMN_taskSpecGrav,
VDbAdapter.COLUMN_taskacid
//VDbAdapter.COLUMN_taskdate
};
// and an array of the fields we want to bind those fields to
int[] to = new int[]{ R.id.TASKID,
R.id.TASKTYPE,
R.id.TASKGRAVITY,
R.id.TASKACID
//R.id.DATE
};
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter tasks = new SimpleCursorAdapter(this, R.layout.tasklist_layout, tasksCursor, from, to);
setListAdapter(tasks);
String[] fromdate = new String[]{
VDbAdapter.COLUMN_taskdate
};
// and an array of the fields we want to bind those fields to
int[] todate = new int[]{
R.id.DATE
};
// SimpleCursorAdapter tasksdates = new SimpleCursorAdapter(this, R.layout.tasklist_layout, tasksCursor, fromdate, todate);
final DateViewBinder binder = new DateViewBinder(formatforddisplay, R.id.DATE);
tasks.setViewBinder(binder);
}
这是来自 DateViewBinder 的代码,与上面的示例链接基本相同(包名当然是正确的)。
import java.text.SimpleDateFormat;
import java.util.Date;
import android.database.Cursor;
import android.view.View;
import android.widget.SimpleCursorAdapter.ViewBinder;
import android.widget.TextView;
public class DateViewBinder implements ViewBinder {
private SimpleDateFormat mFormat;
private int mTargetViewId;
public DateViewBinder(SimpleDateFormat formatforddisplay, int targetViewId) {
mFormat = formatforddisplay;
mTargetViewId = targetViewId;
}
public void setBinding(int from) {
mTargetViewId = from;
}
public void setFormat(SimpleDateFormat format) {
mFormat = format;
}
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
final int id = view.getId();
if (id == mTargetViewId) {
final String value = getLongFieldAsString(cursor, columnIndex);
if (view instanceof TextView)
setViewText((TextView)view, value);
else
throw new IllegalStateException(view.getClass().getName() + " is not a view that can be bound by this view binder (" +
DateViewBinder.class.getSimpleName() + ")");
return true;
}
return false;
}
我在 logcat 中没有收到任何错误,所以通常这可以帮助我指出正确的方向。感谢任何帮助,我的问题以及我的陈述方式(第一次海报)