データベースからオブジェクトのリストを取得しますが、タイトルと日時の2つのパラメーターがあります。リストの各行のmain.xmlとitem.xmlにlistViewを作成しました。すべてのリストを取得し、それをArrayList(Map(String、Object))に配置すると、アダプターに配置されたときに配列リストにすべてのデータが含まれます。
private void getAllNotesLocal () {
manager = new NotesManager(this);
lstNotes = manager.getAllNotes();
ArrayList<Map<String, Object>> _notesList = new ArrayList<Map<String, Object>>(lstNotes.size());
Map<String, Object> _map;
for (NoteObj currNote : lstNotes) {
_map = new HashMap<String, Object>();
_map.put(Constants.ATTRIBUTE_NAME_TITLE, currNote.getName());
_map.put(Constants.ATTRIBUTE_NAME_DATE, currNote.getDate());
_notesList.add(_map);
}
String[] from = {Constants.ATTRIBUTE_NAME_TITLE, Constants.ATTRIBUTE_NAME_DATE};
int[] to = { R.id.tv_name, R.id.tv_date};
SimpleAdapter sAdapter = new SimpleAdapter(this, _notesList, R.layout.item, from, to);
lvAllNotes = getListView();
lvAllNotes.setAdapter(sAdapter);
}
しかし、画面には何も起こりません。arrayAdapterを使用する場合、各行に配置できるパラメーターが1つしかないことを除いて、すべてがOKです。動作するコードは次のとおりです。
ListView lvAllNotes = = getListView();
ArrayList<NoteObj> lstNotes = manager.getAllNotes();
ArrayAdapter<NoteObj> adapter = new ArrayAdapter<NoteObj>(this, R.layout.item, R.id.tv_name, lstNotes);
setListAdapter(adapter);
main.xml:
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
item.xml:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp" >
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_marginLeft="5dp"
android:ellipsize="end"
android:lines="1"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="@string/empty"
android:textSize="18sp" />
<TextView
android:id="@+id/tv_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|right"
android:layout_marginRight="5dp"
android:text="@string/empty"
android:textSize="9sp"
android:textStyle="italic" >
</TextView>
</FrameLayout>