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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

Q&A

解決済

1回答

759閲覧

when の中身をまとめて少なくしたい

kanikamaboco

総合スコア1

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

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

0グッド

1クリップ

投稿2022/01/02 04:10

Kotlin

1 override fun onOptionsItemSelected(item: MenuItem): Boolean { 2 when (item.itemId) { 3 R.id.home -> { 4 val championsImage = findViewById<ImageView>(R.id.championsImage) 5 championsImage.setImageResource(R.drawable.icon) 6 val championsText = findViewById<TextView>(R.id.championsText) 7 championsText.text = "" 8 return true 9 } 10 11 R.id.Aatrox -> { 12 val championsImage = findViewById<ImageView>(R.id.championsImage) 13 championsImage.setImageResource(R.drawable.aatrox) 14 val championsText = findViewById<TextView>(R.id.championsText) 15 championsText.text = getString(R.string.Aatrox_text) 16 return true 17 } 18 19 R.id.Ahri -> { 20 val championsImage = findViewById<ImageView>(R.id.championsImage) 21 championsImage.setImageResource(R.drawable.ahri) 22 val championsText = findViewById<TextView>(R.id.championsText) 23 championsText.text = getString(R.string.Ahri_text) 24 return true 25 } 26 27 R.id.Akali -> { 28 val championsImage = findViewById<ImageView>(R.id.championsImage) 29 championsImage.setImageResource(R.drawable.akali) 30 val championsText = findViewById<TextView>(R.id.championsText) 31 championsText.text = getString(R.string.Akali_text) 32 return true 33 } 34 35 ... 36 37 } 38 return super.onOptionsItemSelected(item) 39 }

R.id.~というコードがまだまだ続く予定なのですが長くなりすぎて
汚く見えるので二つ目(Aatrox)以降を一つにまとめたいです。

手間はかかってもいいのでなるべくきれいにまとめられる方法を知りたいです。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

メソッドにする、itemId と各リソースIDとの関連をテーブル化する等、やり方は色々と思います。

kotlin

1class ChampionViews(val imageView: ImageView, val textView: TextView) { 2 private class Preset(val imageResId: Int, val stringResId: Int, val text: String?) 3 private val presetMap: MutableMap<Int, Preset> = HashMap() 4 5 fun putPreset(key: Int, imageResId: Int, strResId: Int): ChampionViews { 6 presetMap[key] = Preset(imageResId, strResId, null) 7 return this 8 } 9 fun putPreset(key: Int, imageResId: Int, str: String): ChampionViews { 10 presetMap[key] = Preset(imageResId, 0, str) 11 return this 12 } 13 fun selectPreset(key: Int): Boolean { 14 val preset = presetMap[key] ?: return false 15 imageView.setImageResource(preset.imageResId) 16 if(preset.stringResId == 0) { 17 textView.text = preset.text 18 } else { 19 textView.setText(preset.stringResId) 20 } 21 return true 22 } 23} 24 25class MainActivity : AppCompatActivity() { 26 lateinit var championViews: ChampionViews 27 28 override fun onCreate(savedInstanceState: Bundle?) { 29 super.onCreate(savedInstanceState) 30 setContentView(R.layout.activity_main) 31 32 championViews = ChampionViews(findViewById(R.id.championsImage), findViewById(R.id.championsText)) 33 .putPreset(R.id.home, R.drawable.icon, "") 34 .putPreset(R.id.Aatrox, R.drawable.aatrox, R.string.Aatrox_text) 35 .putPreset(R.id.Ahri, R.drawable.ahri, R.string.Ahri_text) 36 .putPreset(R.id.Akali, R.drawable.akali, R.string.Akali_text) 37 //... 38 } 39 40 override fun onOptionsItemSelected(item: MenuItem): Boolean { 41 return if(championViews.selectPreset(item.itemId)) true 42 else super.onOptionsItemSelected(item) 43 } 44}

投稿2022/01/04 08:14

編集2022/01/15 17:37
jimbe

総合スコア12543

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

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

kanikamaboco

2022/01/04 09:27

回答ありがとうございます とても参考になります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問