• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:findViewByIdでidを指定する理由)

findViewByIdでidを指定する理由

このQ&Aのポイント
  • findViewByIdで指定する値は基本的にR.Javaで定義したid値しか代入しちゃいけない
  • 指定されたIDを持つ最初の子孫ビュー、IDがgetIdと一致する場合はビュー自体を検索し、IDが無効または階層内に一致するビューがない場合はnullを検出する
  • なぜそうなのか分からなくて質問しました

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>とあるのでR.Javaで定義しているid値以外はダメという考えで正しいでしょうか? それで正しいです。 同じLayoutを複数使いたい場合は下記のように記述すれば良いようです(添付画像は同じLayoutを複数設置している例です) LayoutInflater oLInf = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); Layoutクラス ilayout = (Layoutクラス) oLInf.inflate(R.layout.Layoutファイル, null); Viewクラス v = (Viewクラス) ilayout.findViewById(R.id.Viewコンポーネント); 詳細は下記ページ参照。 [Android]LayoutInflaterについて(生成,方法比較,実装) https://qiita.com/Bth0061/items/c4f66477979d064913e4

dotneer
質問者

お礼

複数レイアウト設置して、ボタン配置は別にってことですね。

その他の回答 (2)

回答No.3

>回答No.2 amanojaku1 >なぜそうなのか分からなくて Layoutファイル(XML拡張子)内でGUIコンポーネント(ボタンやラベルといったパーツ)を設定すると、「Android Studio」が(R.java内に)自動的に、そのGUIコンポーネントのIDを生成してくれます。 R.java内に存在しないIDは当然GUIコンポーネントも存在しないと「Android Studio」に判定されエラーになります。 ただし、(「Android Studio」のバグか?仕様か?)1度Layoutファイル(XML拡張子)内でGUIコンポーネントを設定してから、削除しても、そのGUIコンポーネントのIDが残っていて使える場合がありますが…(そのIDを使ったら多分 実行エラーになると思われます)。

dotneer
質問者

お礼

R.Java以外では使えないということですね。

回答No.2

>回答No.1 amanojaku1 つまり通常の「findViewById」でも、「LayoutInflater」からの「findViewById」でもR.javaで定義されたid値しか指定できません。

dotneer
質問者

お礼

Id値しか使ってはいけないということですね。

関連するQ&A