android-ListActivity:在将数据放入行之前更改来自SQLite的数据

这是我的ListActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_list);

    mDbHelper = new MyDbAdapter(this);
    mDbHelper.open();
    fillData();

    registerForContextMenu(getListView());
}

private void fillData() {
    // Get all of the rows from the database and create the item list
    Cursor c = mDbHelper.fetchAllTransactions();
    startManagingCursor(c);

    // Create an array to specify the fields we want to display in the list
    String[] from = new String[]{MyDbAdapter.KEY_DATE,MyDbAdapter.KEY_NAME};

    // and an array of the fields we want to bind those fields to
    int[] to = new int[]{R.id.row_date,R.id.row_name};

    // Now create a simple cursor adapter and set it to display
    setlistadapter(new SimpleCursorAdapter(this,R.layout.my_list_row,c,from,to));
}

这是我的行布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <TextView android:id="@+id/row_date" android:layout_width="wrap_content" android:layout_height="fill_parent" />
    <TextView android:id="@+id/row_name" android:layout_width="wrap_content" android:layout_height="fill_parent" />
</LinearLayout>

该日期实际上以int形式存储在sqlLite数据库中,因此它显示为整数.

有谁知道从int创建日期的方法,因此它不会显示为1216544611(或其他),而是显示为“ 12/11/2009 11:32”?

最佳答案
我怀疑您将需要编写自己的CursorAdapter来将int格式化为日期字符串.诀窍是实现bindView()在列表项显示之前对其进行格式化:

private final class MyCursorAdapter extends CursorAdapter {
    MyCursorAdapter(Context context,Cursor c) {
        super(context,c);
    }

    @Override public void bindView(View view,Context context,Cursor cursor) {             

        // Format the date string
        TextView dateView = (TextView) view.findViewById(R.id.row_date);
        long millis = cursor.getLong(cursor.getColumnIndex(MyDbAdapter.KEY_DATE));
        dateView.setText(DateFormat.getDateInstance().format(new Date(milis)));

        // Do the rest of your view formatting
        ...
    }

    @Override View public newView(Context context,Cursor cursor,ViewGroup parent) {        
        View view = getLayoutInflater().inflate(R.layout.my_list_row,null);
        bindView(view,context,cursor);
        return view;        
    }
}

并将其连接到onCreate()中的Activity:

setlistadapter(new MyCursorAdapter(this,c));

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...