0

データベースからオブジェクトのリストを取得しますが、タイトルと日時の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>
4

2 に答える 2

0

SimpleCursorAdapterデータはデータベースからのものであり、listitemは2つのテキストビューのみで構成されているため、使用することをお勧めします。

     ListAdapter adapter = new SimpleCursorAdapter(
                 this, android.R.layout.two_line_list_item, mCursor,
                 new String[] {COLUMN1_NAME, COLUMN2_NAME}, 
                 new int[] {android.R.id.text1, android.R.id.text2});

     mList.setListAdapter(adapter);

BaseAdapterまたは、またはを拡張する新しいアダプタを設定できますArrayAdapter。ここにあなたのためのリンクがあります。

2行のリストビュー

于 2012-08-19T10:35:17.837 に答える
0

フレームのレイアウトが問題だと思います。これは、フレームレイアウトがユーザーに単一のビューを表示するだけであるためです。残りのすべてのビューは、最初のレイアウトの下に非表示になります。そのため、私の解決策が問題の解決に役立ったことを知って、どれほど幸せなのか。

于 2012-08-19T12:04:23.203 に答える