🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Android

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

Android Studio

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

Kotlin

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

Q&A

解決済

2回答

1100閲覧

自作のlistviewで画像によるラジオボタン的動作を行う方法

chirunote

総合スコア16

Android

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

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2019/10/09 22:34

編集2019/10/10 02:32

自作のlistviewのOFFボタンを押したらONに切り替わり、他の画像は全部OFFになるというラジオボタンを考えています。
kiokuNumに1度目に押したボタンを覚えさせ、新たなOFFボタンクリックしOFF→ONになったら、前のボタンがON→OFFに切り替わるというものです。
が、やり方は思いつけどその先がわからずツマッています。お教えいただけたら幸いです

var items = arrayListOf<String>("セリフ1","セリフ2","セリフ3") var kiokuNum=0 //クリックリスナー val migiNoOtoBTN = AdapterView.OnItemClickListener { adapterView,view,position,id -> Toast.makeText(applicationContext, "右のONOFF:${id}", Toast.LENGTH_SHORT).show() } val adapter = object : ArrayAdapter<String>(this, R.layout.list_item, R.id.text1, items) { override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { val itemView = super.getView(position, convertView, parent) //クリックリスナー itemView.bt_migi.setOnClickListener { v -> migiNoOtoBTN.onItemClick( parent as AdapterView<*>?, v, position, getItemId(position) ) kiokuNum=position itemView.bt_hidari.setImageResource(R.drawable.btseton) } return itemView } } listView.adapter=adapter

イメージ説明
画像上のOFFボタンのリソースは R.drawable.btsetoffで、
変えたいONボタンはR.drawable.btsetonです。

作業はAndroidStudio3.5、 kotlin です。

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

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

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

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

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

dodox86

2019/10/10 00:18 編集

・お手数ですが、コードのインデントを直してください。(回答者、その他閲覧者に見づらいです) ・R.drawable.btseton の画像がボタン"ON"の画像ですか? OFFの画像のリソースIDは?
chirunote

2019/10/10 00:28

・申し訳ありませんでした。インデントを対応しました。 ・画像上のOFFボタンのリソースは R.drawable.btsetoffで、変えたいONボタンはR.drawable.btseton です。
dodox86

2019/10/10 00:49

「ラジオボタン」と書かれていますが、AndroidにはRadioButtonと言う独立したコントロールが既にありますので、ListViewを使って、ラジオボタン的な動作をするものを作りたいということで合っていますでしょうか。
chirunote

2019/10/10 00:49

そのとおりですね。タイトルを変えておきます
guest

回答2

0

ベストアンサー

getViewメソッドの中で選択状態に応じた画像の設定を行い、選択位置の変更時にはnotifyDataSetChangedメソッドを呼び出すことでご要望の挙動が実現できると思います。

kotlin

1val adapter = object : ArrayAdapter<String>(this, R.layout.list_item, R.id.text1, items) { 2 private var selectedPosition = -1; // 初期状態では選択なし 3 4 override fun getView(position: Int, convertView: View?, parent: ViewGroup): View { 5 val itemView = super.getView(position, convertView, parent) 6 7 // 選択状態に応じて画像の変更 8 itemView.bt_hidari.setImageResource(if (position == selectedPosition) { 9 R.drawable.btseton 10 } else { 11 R.drawable.btsetoff 12 }) 13 14 itemView.bt_migi.setOnClickListener { v -> 15 migiNoOtoBTN.onItemClick( 16 parent as AdapterView<*>?, v, position, getItemId(position) 17 ) 18 19 // 選択位置の変更と各セルの更新 20 selectedPosition = position 21 notifyDataSetChanged() 22 } 23 return itemView 24 } 25}

また、選択時/非選択時の画像はselector形式のdrawableリソースで宣言しておくと、プログラム側からはView#setSelectedの呼び出しのみで画像の切り替えができるので便利です。

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<selector xmlns:android="http://schemas.android.com/apk/res/android"> 3 <item 4 android:state_selected="true" 5 android:drawable="@drawable/btseton" /> 6 <item 7 android:drawable="@drawable/btsetoff" /> 8</selector>

投稿2019/10/10 12:12

編集2019/10/10 12:14
kakajika

総合スコア3131

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

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

chirunote

2019/10/10 14:10

notifyDataSetChanged()で全切り替えが起きたら上からval itemViewからコードが流れて絵が切り替わるというわけですね。前回に引き続きありがとうございます。そしてもう少しメソッド覚えます・・・知らずにどんなにコード眺めても進まないはずですね・・・
guest

0

ボタンが押されたら、それぞれのボタンの状態に合わせて画像をすり替えるだけですが、なにがわからないんでしょう

投稿2019/10/09 22:51

y_waiwai

総合スコア88038

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

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

chirunote

2019/10/10 00:05 編集

ありがとうございます。クリックした画像のIDはわかるのですが、kiokuNumで覚えさせた行番号の画像を切り替える指定方法がわかりません。 migiNoOtoBTN.onItemClick( parent as AdapterView<*>?, v, position, getItemId(position) ) itemView.bt_migi.setImageResource(R.drawable.btseton) listView.(kiokuNumで覚えさせたID).bt_migi.setImageResource(R.drawable.btsetoff) kiokuNum=position } こんな風にできたらよいのですが・・・
y_waiwai

2019/10/09 23:14

クリックされたとこだけ変えるんじゃなくて、全部のボタンの画像変えないといけないでしょうし、そのほうが簡単でしょうね
chirunote

2019/10/10 00:06

ありがとうございます。たぶんfor構文で入れなおした後で押した個所だけ itemView.bt_hidari.setImageResource(R.drawable.btseton) を入れればよいかと思うのですが、IDはlistView.bt_migi以外にわからないためどうしたらよいかわからない状態です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問