web-dev-qa-db-ja.com

「インクルード」レイアウト内のボタンにアクセスする方法

ドキュメントを参照してください: http://Android-developers.blogspot.com/2009/02/Android-layout-tricks-2-reusing-layouts.html

含まれるレイアウト内にボタンがありますが、ボタンにアクセスするにはどうすればよいですか? IDがわかりません! OnClickListener ...を定義するにはどうすればよいですか?

助けてください...

35
chow

Includeタグで持つidは、含まれるレイアウトのルートビューに割り当てられます。まず、findViewByidを使用して、そのビューへの参照を取得します。次に、その特定のビューでfindViewByIdを呼び出して、レイアウト内のビューへの参照を取得できます。そう:

View myLayout = findViewById( R.id.cell1 ); // root View id from that link
View myView = myLayout.findViewById( R.id.someinnerview ); // id of a view contained in the included file
73
Jems

必要なのは、親ビューのIDです:

enter image description here

この例では、LinearLayoutは、含まれているビューから必要なTextViewの親です。

私は今これを行うことができます:

    View view = findViewById(R.id.include_title_layout);
    TextView titleTV = (TextView) view.findViewById(R.id.newsTitleTextView);
    titleTV.setText("Whatever");
17

同じXMLレイアウトを複数回含める場合のウィジェットIDの解決に関して、よくある落とし穴があります。 http://www.coboltforge.com/2012/05/tech-stuff-layout/ のブログ投稿では、まさにその問題とその解決方法を説明しています!

5
bk138

インクルードのIDを知っています。その完全な要素を取得し、そこからその子の1つを取得できます。

2
Nanne

実際、includeタグにはルートレイアウトのすべての要素が含まれます。そのため、アクティビティでfindViewByIdを使用していつでもアクセスできます。

includeレイアウトがある_alayout.xml_があるとします。アクティビティAの1つで、onCreate内でsetContentView(R.layout.alayout)を宣言しました。インクルードレイアウト内に、_myBtnというIDのボタンがあります。メインレイアウトにある場合にアクセスできるのと同じ方法で、onCreate内にアクセスできます:findViewById(R.id.myBtn)

0
Munim Dibosh

あなたの平均はNavigationViewだと思います。この方法で内部レイアウトにアクセスできます。

NavigationView ngv= (NavigationView) findViewById(R.id.navigation_id);
View innerview =  ngv.getHeaderView(0);
TextView user_view= (TextView)innerview.findViewById(R.id.nav_name); //any you need
user_view.setText(user);
0