質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

3回答

562閲覧

forEachの変数を処理の中で使いたい

m-mega

総合スコア56

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

1クリップ

投稿2022/06/30 04:49

やりたいこと

ListViewに表示するmutableMapの内容を、forEachでループさせて作成したいです。
現在、下記のコードでListViewに画像と配列の文字列を表示することができています。

FishListActivity.kt

kotlin

1... 2class FishListActivity : AppCompatActivity() { 3 override fun onCreate(savedInstanceState: Bundle?) { 4 super.onCreate(savedInstanceState) 5 setContentView(R.layout.activity_fish_list) 6 7 // 魚のリスト 8 val all_fish_list = listOf( 9 "bora", 10 "buri", 11 "iwana", 12 "katsuo", 13 "maguro", 14 "sanma" 15 ) 16 17 // 魚の表示名とサイズ記録用マップ 18 val bora = mutableMapOf("name" to "ボラ", "MAX" to 10, "MIN" to 10) 19 val buri = mutableMapOf("name" to "ブリ", "MAX" to 10, "MIN" to 10) 20 val iwana = mutableMapOf("name" to "イワナ", "MAX" to 10, "MIN" to 10) 21 val katsuo = mutableMapOf("name" to "カツオ", "MAX" to 10, "MIN" to 10) 22 val maguro = mutableMapOf("name" to "マグロ", "MAX" to 10, "MIN" to 10) 23 val sanma = mutableMapOf("name" to "サンマ", "MAX" to 10, "MIN" to 10) 24 25 val data = mutableListOf( 26 mutableMapOf ("image" to R.drawable.bora, "name" to "ボラ", 27 "MAXrecord" to String.format(resources.getString(R.string.fish_MAX_size), bora["MAX"]), 28 "MINrecord" to String.format(resources.getString(R.string.fish_MIN_size), bora["MIN"])) 29 ) 30 31 // リストに表示するデータを作成 32 all_fish_list.forEach{ name -> 33 data.add( 34 mutableMapOf ("image" to R.drawable.bora, "name" to bora["name"].toString(), 35 36 // ↑でnameをboraの部分に当てはめることができないか? 37 38 "MAXrecord" to String.format(resources.getString(R.string.fish_MAX_size), bora["MAX"]), 39 "MINrecord" to String.format(resources.getString(R.string.fish_MIN_size), bora["MIN"])) 40 ) 41 } 42 43 // ListViewにデータをセットする 44 val list = findViewById<ListView>(R.id.fishList) 45 list.adapter = SimpleAdapter( 46 this, 47 data, 48 R.layout.list_item, 49 arrayOf("image", "name", "MAXrecord", "MINrecord"), 50 intArrayOf(R.id.image, R.id.name, R.id.MAXrecord, R.id.MINrecord) 51 ) 52 } 53}

上記のコードにて、「R.drawable.bora」の「bora」の部分をforEachのnameに置き換えたいです。
同様に、「bora["name"]」の「bora」の部分も置き換えたいです。

わからないこと1

「bora」の部分を「name」の値に置き換える方法が分かりません。
文字列のように「R.drawable.${name}」としましたがうまくいきませんでした。

該当箇所

kotlin

1all_fish_list.forEach{ name -> 2 data.add( 3 mutableMapOf ("image" to R.drawable.bora, "name" to bora["name"].toString(),

わからないこと2

「val data」は、中身が空の状態で宣言したいのですが、「mutableLitst<mutableMapOf>()」
と宣言することはできませんでした。
mutableMapを型としてとる中身が空のmutableListを宣言するにはどうすれば良いのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

わからないこと1の回答

画像リソースの取得は、ご指摘いただいた内容の通り下記のようにすることでIDでリソースを取得することができました。

image" to getResources().getIdentifier(name,"drawable",getPackageName()),

リスト「bora[ ]」の変数部分「bora」を文字列で指定することは難しかったため、下記のようにmutableList型にまとめることで、文字列で指定することができるようになりました。

// 魚の表示名とサイズ記録用マップ val fish_list = mutableMapOf( "bora" to mutableMapOf("name" to "ボラ", "MAX" to 15, "MIN" to 150, "GET" to 1), "buri" to mutableMapOf("name" to "ブリ", "MAX" to 12, "MIN" to 120, "GET" to 1), "iwana" to mutableMapOf("name" to "イワナ", "MAX" to 10, "MIN" to 100, "GET" to 1), "katsuo" to mutableMapOf("name" to "カツオ", "MAX" to 18, "MIN" to 180, "GET" to 1), "maguro" to mutableMapOf("name" to "マグロ", "MAX" to 11, "MIN" to 110, "GET" to 1), "sanma" to mutableMapOf("name" to "サンマ", "MAX" to 13, "MIN" to 130, "GET" to 1) )

わからないこと2の回答

複数の方にご回答いただいたように、型として指定した「MutableMap」でもさらに型を指定することで問題なく宣言することができました。

val data = mutableListOf<MutableMap<String, Any>>()

修正コード

最後に、修正したコードを記載します。
この質問をご覧いただき回答をご検討いただいた全ての方々に感謝いたします。ありがとうございました。

kotlin

1package jp.gr.java_conf.coskx.fishinggame 2 3import androidx.appcompat.app.AppCompatActivity 4import android.os.Bundle 5import android.widget.ListView 6import android.widget.SimpleAdapter 7 8class FishListActivity : AppCompatActivity() { 9 override fun onCreate(savedInstanceState: Bundle?) { 10 super.onCreate(savedInstanceState) 11 setContentView(R.layout.activity_fish_list) 12 13 // 魚のリスト 14 val fish_name = listOf( 15 "bora", 16 "buri", 17 "iwana", 18 "katsuo", 19 "maguro", 20 "sanma" 21 ) 22 23 // 魚の表示名とサイズ記録用マップ 24 val fish_detail = mutableMapOf( 25 "bora" to mutableMapOf("name" to "ボラ", "MAX" to 15, "MIN" to 150, "GET" to 1), 26 "buri" to mutableMapOf("name" to "ブリ", "MAX" to 12, "MIN" to 120, "GET" to 1), 27 "iwana" to mutableMapOf("name" to "イワナ", "MAX" to 10, "MIN" to 100, "GET" to 1), 28 "katsuo" to mutableMapOf("name" to "カツオ", "MAX" to 18, "MIN" to 180, "GET" to 1), 29 "maguro" to mutableMapOf("name" to "マグロ", "MAX" to 11, "MIN" to 110, "GET" to 1), 30 "sanma" to mutableMapOf("name" to "サンマ", "MAX" to 13, "MIN" to 130, "GET" to 1) 31 ) 32 33 // リストに表示するデータ格納用リスト 34 val fishdata = mutableListOf<MutableMap<String, Any>>() 35 36 // リストに表示するデータを作成 37 fish_name.forEach{ name -> 38 if((fish_detail[name]?.get("GET"))==1){ // 既に魚を捕まえていた場合 39 fishdata.add( 40 mutableMapOf ( 41 "image" to getResources().getIdentifier(name,"drawable",getPackageName()), 42 "name" to (fish_detail[name]?.get("name"))!!, 43 "MAXrecord" to String.format(resources.getString(R.string.fish_MAX_size), (fish_detail[name]?.get("MAX"))), 44 "MINrecord" to String.format(resources.getString(R.string.fish_MIN_size), (fish_detail[name]?.get("MIN"))) 45 ) 46 ) 47 } 48 else{ // 魚を捕まえていない場合 49 fishdata.add( 50 mutableMapOf ("image" to R.drawable.fishblack, "name" to "???", 51 "MAXrecord" to String.format(resources.getString(R.string.fish_MAX_size), "???"), 52 "MINrecord" to String.format(resources.getString(R.string.fish_MIN_size), "???")) 53 ) 54 } 55 } 56 57 // ListViewにデータをセットする 58 val fishlist = findViewById<ListView>(R.id.fishList) 59 fishlist.adapter = SimpleAdapter( 60 this, 61 fishdata, 62 R.layout.list_item, 63 arrayOf("image", "name", "MAXrecord", "MINrecord"), 64 intArrayOf(R.id.image, R.id.name, R.id.MAXrecord, R.id.MINrecord) 65 ) 66 } 67}

投稿2022/06/30 08:15

m-mega

総合スコア56

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

1.getResources().getIdentifierでIDを取得できます
2. mutableLitst<mutableMap<String,Any>>()ではないでしょうか?(mutableMapの型パラメータは情報にないので不明)

投稿2022/06/30 05:19

RiaFeed

総合スコア2701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m-mega

2022/06/30 06:51 編集

ご回答いただきありがとうございます! 2.について。ご指摘いただいた通り修正することで宣言することができました。<mutableMap>のみでは型が指定されていないのでエラーになるということですね。 1.について。ご指摘いただいた通り、 「image" to getResources().getIdentifier(name,"drawable",getPackageName()),」 とすることで、リソースを指定することができました。 同様に、「bora["name"]」の「bora」の部分も置き換えたいのですが、この場合、上記の「drawable」にあたるタイプ名は何と指定するべきでしょうか。
RiaFeed

2022/06/30 07:08

「bora["name"]」の「bora」はmutableMap型の変数だと思うんですが、 文字列を基に変数にアクセスする方法は知らないです。 魚の種類ごとに変数を作るのではなく、mutableMap型にまとめれば文字列からアクセスできるようになりますが…
m-mega

2022/06/30 07:54

ご回答いただきありがとうございます。 ご指摘いただいたように、魚ごとに変数を用意するのではなく、mutableMapにまとめることで解決いたしました!
guest

0

わからないこと2
「val data」は、中身が空の状態で宣言したいのですが、「mutableLitst<mutableMapOf>()」と宣言することはできませんでした。mutableMapを型としてとる中身が空のmutableListを宣言するにはどうすれば良いのでしょうか。

kotlin

1val data = mutableListOf<MutableMap<String, Any>>() 2or 3val data: MutableList<MutableMap<String, Any>> = mutableListOf()

投稿2022/06/30 04:59

編集2022/06/30 05:03
shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m-mega

2022/06/30 06:51

ご回答いただきありがとうございます! ご指摘いただいた内容通りに修正したところ、問題なく宣言できました。 <MutableMap>とするだけではなく、型の指定も併せて行う必要があることを理解しました。
shiketa

2022/06/30 08:50

> mutableMapを型として そもそもこれが間違い。mutableMap型は存在しない。あるのはMutableMap型。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問