4

リストビューでカーソルを正しく表示しようとしています。トーストを使用すると正しく表示されるため、カーソルはデータを正しく取得していますが、リスト形式で表示するのに問題があります。

各行で 6 列にする必要があります。

データのない 1 行のみを表示します。とても基本的な問題だと思います。誰かが私が間違っているところを教えてくれるかもしれません。感謝します。

DisplayCursor.Java

public class DisplayCursor extends ListActivity 
{
MyDBManager db = new MyDBManager(this);

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_cursor);

    db.open();
    Cursor cursor = db.getAllRows();
    startManagingCursor(cursor);

    String[] columns = new String[] { MyDBManager.KEY_DESCRIPTION, MyDBManager.KEY_PERCENTAGE, MyDBManager.KEY_PRICE, 
            MyDBManager.KEY_VOLUME, MyDBManager.KEY_VFM, MyDBManager.KEY_QUANTITY };

    int[] to = new int[] { R.id.description,R.id.perc,R.id.price,R.id.units,R.id.vol, R.id.vfm };
    SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, R.layout.row, cursor, columns, to);
    this.setListAdapter(mAdapter);
    db.close();
}   
}

行.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<TextView
    android:id="@+id/description"
    android:layout_width="140dp"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="27dp" />

<TextView
    android:id="@+id/vol"
    android:layout_width="30dp"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/description"
    android:layout_alignBottom="@+id/description"
    android:layout_toRightOf="@+id/description" />

<TextView
    android:id="@+id/perc"
    android:layout_width="30dp"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/vol"
    android:layout_alignBottom="@+id/vol"
    android:layout_toRightOf="@+id/vol" />

<TextView
    android:id="@+id/price"
    android:layout_width="30dp"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/perc"
    android:layout_alignBottom="@+id/perc"
    android:layout_toRightOf="@+id/perc" />

<TextView
    android:id="@+id/units"
    android:layout_width="30dp"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/price"
    android:layout_alignBottom="@+id/price"
    android:layout_toRightOf="@+id/price" />

<TextView
    android:id="@+id/vfm"
    android:layout_width="80dp"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/units"
    android:layout_alignBottom="@+id/units"
    android:layout_toRightOf="@+id/units" />

</RelativeLayout>

activity_display_cursor.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<ListView android:id="@android:id/list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<TextView android:id="@android:id/empty"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/nodata"/>

</LinearLayout>
4

1 に答える 1

4

ああ、CursorAdapter を使用した ListView が再び攻撃します。最初のラウンドを理解するのは簡単ではないので、次のようにします。

ほとんどは正しいですが、row.xml には、表示するカーソルの各列のビューを含める必要があります。CursorAdapter コンストラクターの "layout" 引数は、レイアウト ファイルの resID を指定します。このファイルは1 行を記述します。あなたの場合、コンストラクターへの「to」引数の R.id 値ごとに 1 つずつ、6 つの TextViews を持つ RelativeLayout が必要になる可能性があります。CursorAdapter は、"to" 引数でカーソル列をビューにマッピングします。これが、これらの配列のサイズが同じでなければならない理由です。

activity_display_cursor.xml レイアウトは ListView を定義します。

ちなみに、私は ListActivity をあまり使いません。通常のアクティビティでアダプターを使用して ListView を設定するのは簡単です。また、startManagingCursor は API 11 で廃止されました。android.support.v4.content.CursorLoader と android.support.v4.widget.SimpleCursorAdapter を使用することをお勧めします。

于 2012-11-13T21:24:56.383 に答える