Rob*_*ier 22 android localization internationalization android-viewbinder
我正在构建我的第一个Android应用程序.我遇到的问题是与a相关的日期的存储和本地化显示SimpleCursorAdapter.我有一个类封装了SQLitedatabase 对三个表的访问.该类负责以ISO格式存储所有日期("yyyy-MM-dd").当从数据库中读取日期值并在屏幕上显示时,我希望它们以本地化格式进行格式化.这是我提出的方法.它使用a ViewBinder来进行格式化:
adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor,
int columnIndex) {
if (view.getId() == R.id.text1) {
((TextView) view).setText(getDateFormatView().format(
parseDatabaseDate(cursor.getString(columnIndex))));
return true;
} else if (view.getId() == R.id.text2) {
((TextView)view).setText(
cursor.getString(columnIndex));
return true;
} else {
return false;
}
}
});
Run Code Online (Sandbox Code Playgroud)
getDateFormatView()创建一个SimpleDateFormat具有从中读取的模式的对象strings.xml.parseDatabaseDate()是否SimpleDateFormat使用常量模式从数据库中解析日期yyyy-MM-dd.
虽然这段代码工作得很好但我想知道是否有更好的方法来做到这一点.我不喜欢的是我需要:
SimpleDateFormat对象(一个用于parseDatabaseDate()解析日期字符串SQLiteDatabase,另一个用于格式化值)java.util.Date创建的对象然后立即丢弃所以这就是我要问的原因:是否有更好的方式以本地化格式显示日期?
Dan*_*Lew 43
如果要跳过解析,可以将日期存储为long.然后你可以使用long解析零来创建一个新的Date对象.
这是不直接关系到你的问题,而是:你可能要考虑使用的一件事是android.text.format.DateFormat让你的日期格式化.这样,您可以将日期/时间格式化为用户的区域设置,而不是您自己的预设.它也可能使您的代码更简单,因为您不再需要创建自己的SimpleDateFormat.
考虑到这两点,您可以摆脱对自己方法的调用:
((TextView) view).setText(android.text.format.DateFormat.getDateFormat().format(new Date(cursor.getString(columnIndex))));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20244 次 |
| 最近记录: |