- ベストアンサー
findViewByIdでidを指定する理由
- findViewByIdで指定する値は基本的にR.Javaで定義したid値しか代入しちゃいけない
- 指定されたIDを持つ最初の子孫ビュー、IDがgetIdと一致する場合はビュー自体を検索し、IDが無効または階層内に一致するビューがない場合はnullを検出する
- なぜそうなのか分からなくて質問しました
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>とあるので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
その他の回答 (2)
- amanojaku1
- ベストアンサー率54% (265/488)
>回答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を使ったら多分 実行エラーになると思われます)。
お礼
R.Java以外では使えないということですね。
- amanojaku1
- ベストアンサー率54% (265/488)
>回答No.1 amanojaku1 つまり通常の「findViewById」でも、「LayoutInflater」からの「findViewById」でもR.javaで定義されたid値しか指定できません。
お礼
Id値しか使ってはいけないということですね。
お礼
複数レイアウト設置して、ボタン配置は別にってことですね。