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

## SimpleAdapterを使って表現
:::note info
## イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953063/df59fd68-ed88-d524-af61-53b03553db74.png)
リストのアイテムごとに
上に商品名、下に値段みたいな構図
:::

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

## MainActivity.javaへ記述する
~~~java
public class MainActivity extends AppCompatActivity {

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

:::note info
## 記述内容
~~~java
//レイアウトに配置したリストビューの取得
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};

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

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

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

:::note info
## Mapについて
キー（Key）と値（Value）のペアを管理するコレクション
~~~java: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：その値段
~~~java:追加
//りんごの情報を保持した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);

//同じように追加したいものを次々と入れていく
~~~
:::note info
### menulistからMapを引き出す

Map<String, String> firstMap = menulist.get(0); //menulist(0)のMapを取得
String name = firstMap.get("name");  // "りんご"
String price = firstMap.get("price"); // "300円"
:::
<br></br>
### String[ ]とint[ ]について
~~~java
//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};は後で

:::note info
## SimpleAdapter
~~~java
//第５引数まである
SimpleAdapter adapter = new SimpleAdapter(
        MainActivity.this,
        menulist,
        android.R.layout.simple_list_item_2,
        form,
        to
    );
~~~
**引数**
- **第１、MainActivity.this,**
　Contextを指定します。
　アプリケーションやアクティビティに関する情報を
　保持するオブジェクトです。
　ってChatGPTが言ってました。
　自分にはまだ分かりません・・・

- **第２、作ったMapのリスト**
- **第３、android.R.layout.simple_list_item_2,**
　xmlファイルを指定します。
　今回はAndroidが提供する標準レイアウトで、
　2つのTextViewを含むレイアウトが定義されています。
 ~~~xml: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
- **第４、String[ ]**
　String[ ] form = {"name","price"};
　これの変数であるformを入れる
- **第５、int[ ]**
　int[ ] to = {android.R.id.text1,android.R.id.text2};
　これの変数であるtoを入れる
　第３引数のxml内のTextViewの@+idを指定してます。
:::

## 最後に反映させる
:::note info
### listView.setAdapter(adapter);
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953063/df59fd68-ed88-d524-af61-53b03553db74.png)
これで２行分の情報を持ったListViewができた。
:::