0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AndroidStudio リストビューの1つの項目を2行で表示

Last updated at Posted at 2024-12-19

SimpleAdapterを使って表現

イメージ

image.png
リストのアイテムごとに
上に商品名、下に値段みたいな構図

※ここから先はListViewを配置している前提で進めます。

MainActivity.javaへ記述する

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        /*
        +++ここに記載+++
        */
    }

記述内容

//レイアウトに配置したリストビューの取得
ListView listView = findViewById(R.id.ListView);

//マップ型のリスト作成
List<Map<String,String>> menulist = new ArrayList<>();

//ここへリスト用のデータを記載する

//SimpleAdapter用の配列
String[] form = {"name","price"};
int[] to = {android.R.id.text1,android.R.id.text2};

//第5引数まである
SimpleAdapter adapter = new SimpleAdapter(
        MainActivity.this,
        menulist,
        android.R.layout.simple_list_item_2,
        form,
        to
    );

//反映させる
listView.setAdapter(adapter);

Mapのリストを作る
List<Map<String,String>> menulist = new ArrayList<>();

Mapについて

キー(Key)と値(Value)のペアを管理するコレクション

Mapの使い方 例
        // Mapの作成
        Map<String, String> map = new HashMap<>();

        // 要素を追加
        map.put("name", "Alice");
        map.put("age", "25");
        map.put("city", "Tokyo");

        // 要素の取得
        String name = map.get("name"); // "Alice"
        String age = map.get("age");   // "25"

作ったリストへMapを追加していく
//ここへリスト用のデータを記載する の所へ追記
今回はキーを二つ用意する
name:商品名
price:その値段

追加
//りんごの情報を保持したMapをリストへ
Map map = new HashMap<>();
map.put("name","りんご")
map.put("price","200円")
menulist.add(map);

//なしの情報を保持したMapをリストへ
map = new HashMap<>();//使いまわし
map.put("name","なし")
map.put("price","300円")
menulist.add(map);

//同じように追加したいものを次々と入れていく

menulistからMapを引き出す

Map firstMap = menulist.get(0); //menulist(0)のMapを取得
String name = firstMap.get("name"); // "りんご"
String price = firstMap.get("price"); // "300円"


String[ ]とint[ ]について

//SimpleAdapter用の配列
String[] form = {"name","price"};
int[] to = {android.R.id.text1,android.R.id.text2};

String[] form = {"name","price"};はMap用
int[] to = {android.R.id.text1,android.R.id.text2};は後で

SimpleAdapter

//第5引数まである
SimpleAdapter adapter = new SimpleAdapter(
        MainActivity.this,
        menulist,
        android.R.layout.simple_list_item_2,
        form,
        to
    );

引数

  • 第1、MainActivity.this,
     Contextを指定します。
     アプリケーションやアクティビティに関する情報を
     保持するオブジェクトです。
     ってChatGPTが言ってました。
     自分にはまだ分かりません・・・

  • 第2、作ったMapのリスト

  • 第3、android.R.layout.simple_list_item_2,
     xmlファイルを指定します。
     今回はAndroidが提供する標準レイアウトで、
     2つのTextViewを含むレイアウトが定義されています。

simple_list_item_2.xmlの中身(簡略化した例)
<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="wrap_content">

   <TextView
       android:id="@+id/text1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />

   <TextView
       android:id="@+id/text2"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />
</LinearLayout>

 こういうカスタマイズ済みのxmlがあり
 そのファイルを指定している認識でOK

  • 第4、String[ ]
     String[ ] form = {"name","price"};
     これの変数であるformを入れる
  • 第5、int[ ]
     int[ ] to = {android.R.id.text1,android.R.id.text2};
     これの変数であるtoを入れる
     第3引数のxml内のTextViewの@+idを指定してます。

最後に反映させる

listView.setAdapter(adapter);

image.png
これで2行分の情報を持ったListViewができた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?