Kotlinのビュー要素は変数に格納できるという事実

フラグメントのビュー要素をメインアクティビティからいじりたいんですけど…

こうした悩みを解決します。

フラグメントのテキストビュー(=ビュー要素)に値を入れたい

画面遷移でフラグメントを使っているのですが、メインアクティビティからフラグメントのテキストビューに値を入れる必要がありました。

けど、メインアクティビティからフラグメントのビュー要素にアクセスする方法が分からず、半日も悩んでおりました。

ちょうどこのときChatGPTに触ってみたところで、試しにKotlin分かる?って聞いたら、「はい、Kotlinについての知識があります。 どのような質問がありますか?」というんです。

そこで色々質問してみました。どれもとても正確な回答でKotlinの理解がどんどん深まります。

そしていよいよ分かったのです、ビュー要素は変数に格納できるという事実を。下記参照。

「はい、その通りです」の回答に、いろんな疑問が一気に吹き飛びました。

findViewByIdは何をしてるのか

よく理解せずに使い続けてきたfindViewByIdメソッド。

実はこれ、指定したidの要素を検索して、一致したらそのビュー要素を返すメソッドだったのです。

変数にビュー要素を入れて、その変数にtextメソッドでテキスト入れるとか。

例えばこんな感じ。

var tv = findViewById(R.id.tatepro) //tateproというIDのビュー要素をtv変数に格納
tv.text = "kotlin" //tv(=tateproビュー要素)のテキストに"kotlin"を入れる

こうすれば動くんだー、と思って無意識で使ってきたものの、tvに何が入ってるか気にしたことがなかった…。

つまるところ、上記のコードはただのメソッドチェーンなわけで

findViewById(R.id.tatepro).text = "kotlin"

これと同義なわけですよね。

フラグメントからメインにビュー要素を渡す

ここまで分かれば、メインからフラグメントのビューをいじれそうです。

どうしたかというと、フラグメントのonCreateViewでビュー要素をメインアクティビティのグローバル変数に入れてやったのです。

フラグメントのライフサイクルが、とかそもそもグローバル変数を使う設計は推奨されないとか、たぶん、このやり方はよくないのだと思う。

ただ今の私の知識だとこのようにしか作れず、もう少し技術が深まったら別途更新します。

メインアクティビティはグローバル変数を介することでフラグメントのビュー要素に対してメソッドを実行できるわけです。

まとめ

メインアクティビティからフラグメントのビュー要素に何かするには、フラグメントのビュー要素をメインアクティビティのグローバル変数に格納して、グローバル変数経由でフラグメントのビュー要素メソッドを実行させればよいです。

たぶんこの方法は良くない気がする…けど何が正解か現状分かってないです、とりあえずこれで動きます。

▼不明点や作成依頼などあればこちらからどうぞ
立プロに問合せる

▼インスタやってます

 

立プロ

組込エンジニア⇒個人事業主
ITと連携したビジネス発展をサポートしています。
C,C#,JavaScript, Vue, PHP, VBA, GAS, Kotlinなど、扱う言語が増えゆく日々。

立プロをフォローする
Kotlin
立科プログラミング
タイトルとURLをコピーしました