web-dev-qa-db-ja.com

Androidで2列のリストビューを表示するにはどうすればよいですか?

私はAndroidアプリケーションがあり、グリッドビューを表示します:

1

2

4

GridView gridview=(GridView)findViewById(R.id.GridView_test);
DataBaseHelper dbhelper=new DataBaseHelper(this);
ArrayList<String> test=new ArrayList<String>(5);
backlinksadapter.add("1");
backlinksadapter.add("2");
backlinksadapter.add("3");
backlinksadapter.add("4");
ArrayAdapter mAdapter=new ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, test);
gridview.setAdapter(mAdapter);

現時点では機能していますが、グリッドのforeach行、2次元配列の値を持つ2列(ASP.NetのGridViewのようなもの-データソースとして)を表示したいと思います。

表示したい:

1 |人1

2 |人2

3 |人3

4 |人4

何か案が?

16
Sosi

グリッドビューである必要がありますか? ListViewは機能しますか?

各行に2つの項目を表示するListViewおよびListActivityを作成しました。私は、SDKが提供するsimple_list_item_2.xmlレイアウトから始めました。このレイアウトでは、行ごとに2つのアイテムがリストされますが、2番目の行は上に配置され、2番目の行は小さいフォントを使用しています。私が欲しかったのは、右と左の2つが同じ線上にあるアイテムです。

まず、simple_list_item_2.xmlをプロジェクトのres/layoutディレクトリに新しい名前でコピーし、ビューエレメント名を「TwoLineListItem」のままにしながら、プロパティAndroid:mode = "twoLine"を "oneLine"に変更しました。次に、2つの内部要素を、自分がやりたいことを実行する要素に置き換えました。

リストを初期化するコードで、MatrixCursorを作成し、それに目的のデータを入力しました。 2つの項目をサポートするには、MatrixCursorの各行に3つの列が必要です。1つは主キー "_id"で、他の2つの列は表示したい項目です。その後、SimpleCursorAdapterを使用して、ListViewを入力および制御することができました。

私のレイアウトXMLファイル:

 <?xml version="1.0" encoding="utf-8"?>
  <TwoLineListItem
     xmlns:Android="http://schemas.Android.com/apk/res/Android"
     Android:paddingTop="2dip"
     Android:paddingBottom="2dip"
     Android:layout_width="fill_parent"
     Android:layout_height="wrap_content"
     Android:minHeight="?android:attr/listPreferredItemHeight"
     Android:mode="oneLine"
  >
<TextView
    Android:id="@Android:id/text1"
    Android:gravity="left"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="6dip"
    Android:layout_marginTop="6dip"
    Android:textAppearance="?android:attr/textAppearanceLarge"
/>
<TextView
    Android:id="@Android:id/text2"
    Android:gravity="right"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginLeft="6dip"
    Android:layout_marginTop="6dip"
    Android:layout_marginRight="6dip"
    Android:layout_toRightOf="@Android:id/text1"
    Android:textAppearance="?android:attr/textAppearanceLarge"
    Android:textColor="@color/MainFontColor"
/>
</TwoLineListItem>

「左」と「右」のAndroid:gravity値を使用して、左側のアイテムを左揃えにし、右側のアイテムを右揃えにしていることに注意してください。レイアウトにはさまざまな重力値が必要です。さらに、必要のない左側のアイテムのサイズを制御するためのプロパティが必要になります。

ListViewを初期化したmyListActivityクラスのメソッド:

private void initListView()
{
    final String   AuthorName    = "Author: ";
    final String   CopyrightName = "CopyRight: ";
    final String   PriceName     = "Price: ";

    final String[] matrix  = { "_id", "name", "value" };
    final String[] columns = { "name", "value" };
    final int[]    layouts = { Android.R.id.text1, Android.R.id.text2 };

    MatrixCursor  cursor = new MatrixCursor(matrix);

    DecimalFormat formatter = new DecimalFormat("##,##0.00");

    cursor.addRow(new Object[] { key++, AuthorName, mAuthor });
    cursor.addRow(new Object[] { key++, CopyrightName, mCopyright });
    cursor.addRow(new Object[] { key++, PriceName,
            "$" + formatter.format(mPrice) });

    SimpleCursorAdapter data =
        new SimpleCursorAdapter(this,
                R.layout.viewlist_two_items,
                cursor,
                columns,
                layouts);

    setListAdapter( data );

}   // end of initListView()

MatrixCursorコンストラクターのパラメーターは、カーソル内の列の順序と名前を定義する文字列の配列です。重要:「_id」列を必ず追加してください。追加しないと、MatrixColumnが例外をスローして機能しなくなります。

3つの変数、mAuthor、mCopyrightおよびmPriceは、ListAdaptorクラスの3つのデータメンバーであり、他の場所で初期化されます。私の実際のコードでは、mAuthorは実際には著者名のリストからこのメソッドに組み込まれています。著者名は、名前間の区切り文字として「\ n」を使用して単一の文字列に連結されます。これにより、複数の作成者名が同じTextViewの異なる行に表示されます。

SimpleCursorAdapterのctorパラメーターは、各リスト行に使用するビューのID、データを含むカーソル、各要素がカーソルからの列の名前(取得するための順序)である文字列の配列、および対応するリスト行の各アイテムに使用するビューのビューIDの配列。

32

これらのプロパティを持つ既存のアダプターが見つからない場合は、独自のカスタムアダプターを作成してビューにマッピングできます。

Hello、GridView チュートリアルは、これを行う方法を示しています。

4
JRL

JRLは正しいです。各行に表示される内容を制御できる独自のカスタムアダプターを作成する必要があります。 this が役立つかもしれません。より高度な例が見つかります ここhttp://developerlife.com/tutorials/?p=327

リストを使用したくない場合は、TableLayoutにデータを表示することもできます。ただし、各セルを埋める必要があるため、これは手動のアプローチになります。

最高の成功。

3
stfn

toString()str(id) + " | " + personNameを返すクラスを作成して、Stringオブジェクトの代わりにテンプレートクラスとして使用しませんか?

0

これをXML Android:numColumns = "2"に追加するだけです。