
フラグメントのビュー要素をメインアクティビティからいじりたいんですけど…
こうした悩みを解決します。
フラグメントのテキストビュー(=ビュー要素)に値を入れたい
画面遷移でフラグメントを使っているのですが、メインアクティビティからフラグメントのテキストビューに値を入れる必要がありました。
けど、メインアクティビティからフラグメントのビュー要素にアクセスする方法が分からず、半日も悩んでおりました。
ちょうどこのとき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でビュー要素をメインアクティビティのグローバル変数に入れてやったのです。
フラグメントのライフサイクルが、とかそもそもグローバル変数を使う設計は推奨されないとか、たぶん、このやり方はよくないのだと思う。
ただ今の私の知識だとこのようにしか作れず、もう少し技術が深まったら別途更新します。
メインアクティビティはグローバル変数を介することでフラグメントのビュー要素に対してメソッドを実行できるわけです。
まとめ
メインアクティビティからフラグメントのビュー要素に何かするには、フラグメントのビュー要素をメインアクティビティのグローバル変数に格納して、グローバル変数経由でフラグメントのビュー要素メソッドを実行させればよいです。
たぶんこの方法は良くない気がする…けど何が正解か現状分かってないです、とりあえずこれで動きます。