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

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

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

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

Android Studio

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

Kotlin

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

Q&A

解決済

2回答

344閲覧

RecyclerView.Adapterに外から値を渡したい

退会済みユーザー

退会済みユーザー

総合スコア0

Android

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

Android Studio

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

Kotlin

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

0グッド

0クリップ

投稿2022/09/18 03:24

前提

ここ数ヶ月前からAndroid+Kotlinでアプリ開発を始めた初心者です。
RecyclerViewを使って表敬式のレイアウトを作っていますが、RecyclerViewの外から値を渡すことによってRecyclerViewの中のTextViewの背景色を変えたいと思っています。
例えば、ButtonのsetOnClickListenerでボタンを押されたときに、RecyclerViewの中のTextViewの背景色を変えるような仕組みを考えています。

あまりいい方ではないと、自分でわかっていつつも^^;、他にいい方法が思い浮かばなかったので、
RecyclerView.Adapterの中のcompanion objectの中にpublicな変数を定義し、これを外から更新することによって、TextViewの背景色を変える仕組みを作りました。

実現したいこと

companion objectの中にpublicな変数はJavaでいうとstaticなクラス変数なので、コーディング的にあまりよろしくないかと・・・
(Android的にはstaticなクラス変数はなにか悪影響があるのか・・・?)
他に、もっとエレガント&スマートな方法はあるのでしょうか?

該当のソースコード

class MyAdapter(val applicationContext: Context): RecyclerView.Adapter<MyAdapter.ViewHolder>() { companion object { // ButtonのsetOnCliclListenerでtrue/falseを変えてやる var flag = false } ・・・・ class ViewHolder(binding: MyViewBinding) : RecyclerView.ViewHolder(binding.root) { var text1: TextView var test2: TextView var text3: TextView init { text1 = binding.text1 text2 = binding.text2 text3 = binding.text3 } ・・・・ } ・・・ override fun onBindViewHolder(holder: ViewHolder, position: Int) { if (flag) { // text1、text2、text3の背景色を赤くする } else { // text1、text2、text3の背景色を青くする } } }

補足情報(FW/ツールのバージョンなど)

AndroidStudio Dolphine 2021.3.1
Kotlin 1.7
Android R(11) API 30

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

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

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

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

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

jimbe

2022/09/18 10:48 編集

(合ってるか分からなかったので削除)
guest

回答2

0

単にアダプタにフラグのプロパティを作り、セットされたらノーティファイで再表示させれば良いだけに思います。

その通りですね。あまり難しく考えることはありませんでした。
ご指摘の通りで実現できました。

投稿2022/09/18 10:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

何故わざわざコンパニオンを使うのでしょうか。
単にアダプタにフラグのプロパティを作り、セットされたらノーティファイで再表示させれば良いだけに思います。

kotlin

1class MyAdapter 2 //色々略 3 4 var flag : Boolean = false 5 set(value) { 6 field = value 7 notifyDataSetChanged(); 8 } 9}

投稿2022/09/18 07:24

編集2022/09/18 11:12
jimbe

総合スコア12648

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問