2011-07-23 5 views
0

私はSQLiteデータベースから日付を取得し、すべてをリストに表示するListAdapterを持っています。つまり、日付は人間が読める形式ではなく、変換を実行するためのヘルパーメソッドがありますが、コードに実装するにはどうすればよいですか?カーソルを使用する必要がない場合ListAdapterに表示される前のデータのフォーマット

// Get all of the notes from the database and create the item list 
    Cursor c = mDbHelper.fetchAllItems(); 
    startManagingCursor(c); 

    String[] from = new String[] { TrackerDbAdapter.KEY_DATE }; 
    int[] to = new int[] { R.id.row_date }; 

    // Now create an array adapter and set it to display using our row 
    SimpleCursorAdapter history = 
     new SimpleCursorAdapter(this, R.layout.history_row, c, from, to); 
    setListAdapter(history); 
+0

ない答えが、改善のために移入う

オブジェクトパフォーマンス、私はより良いデータを保存するときに時間形式を変換するのではなく、データベースからデータを読み込むたびに変換することをお勧めします。 – NguyenDat

+0

私はデータベースに "2011年7月27日"として日付を保存するのではなく、 "20110727"(YYYYMMDD)のようなものを使いたいと思っています。他のフォーマットもあります。 – Assim

答えて

0

私は、このリンクを見て、カスタムListAdapterまたはカスタムSimpleCursorAdapter

を作成しようとするだろう:

これは私のコードがどのように見えるかです。 http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/ arraylistとcustom listAdpaterの使い方について説明しています。

SimpleCursorAdapterでも同じことができます。私はこの時点で良いチュートリアルを見つけることができませんでした。私がこれを行うときにこれに追加します

0

SimpleCursorAdapter.ViewBinderを使用して、書式設定されたデータをビューに添付します。

SimpleCursorAdapter.ViewBinder dataBinder = new SimpleCursorAdapter.ViewBinder() { 
@Override 
    public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
     ((TextView)view).setText(cursor.getString(columnIndex)); 
     return true; 
    } 
}; 
simpleCursorAdapter.setViewBinder(dataBinder) 
+0

そのコードはどこに正確に配置しますか?私はSimpleCursorAdapterの後に配置しようとしましたが、最後の行でdataBinderがsetCursorToStringの正しい引数ではないエラーが発生しました。 – Assim

+0

@Assimコードを更新しました。 – dira

+0

これはまだ動作しません。私は自分のコードにどこに配置するのか分かりません。元のコードから何かを変更する必要はありますか?それは最後の行の引き数とまだ関係しています。それを機能させるようです。 – Assim

0

オプション1:@nguyendat同様のパフォーマンスのために、あなたはあなたの最も柔軟性を提供するために、データベースでフォーマットされた日付と同様に、非フォーマットされたバージョンを格納することができ、と述べました。しかし、同じテーブルでは、これは冗長性のために2番目の正規形に違反するため、行内のすべてのデータを更新するためにコードを慎重にする必要があります。 これを実装するには、DBAdapterのinsertコマンドで変換コードを入力します。

オプション2:あなたの日付

public class FormattedDate { 
private int oneDate; 
public Punch (int unformattedDate) { 
    oneDate = unformattedDate; 
} // ends constructor 

@Override 
public String toString() { 
    //put your conversion code here 
    return myFormattedDate; 
}} 

のためのクラスを作成し、この比較や変換のための他の任意のコードを配置する適切な場所の追加の利点を持っています。あなたのDBAdapterインサイド

、この

public ArrayList<FormattedDate> fetchAllItems() { 
    ArrayList<FormattedDate> results = new ArrayList<FormattedDate>(); 
    Cursor c = db.rawQuery("SELECT MY_UNFORMATTED_DATE FROM yourTable", null); 
    if (c.getCount() > 0) { 
     c.moveToFirst(); 
     do { 
      results.add(new FormattedDate(c.getInt(c.getColumnIndex(MY_UNFORMATTED_DATE)))); 
      } while (c.moveToNext()); 
     } 
     c.close(); 
     return results; 
    } 

にあなたのクエリを変更する。これは、FormattedDateのArrayListのを返します。最後に、これはリストビュー

setContentView(R.layout.my_list_view); 
ArrayList<FormattedDate> dateArray = mDBHelper.fetchAllItens(); 
ArrayAdapter<FormattedDate> dateAdapter = new ArrayAdapter<FormattedDate> (getApplicationContext(), R.layout.list_item, dateArray); 
setListAdapter(dateAdapter); 
関連する問題