请参阅文档:http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html
我在包含的布局中有一个按钮,我该如何访问按钮?我不知道id!如何定义OnClickListener ......?
请帮忙......
答案 0 :(得分:71)
您对include标记的ID被分配到包含布局的根视图。 首先使用findViewByid获取对该视图的引用。然后,您可以在该特定View上调用findViewById以获取对布局内View的引用。所以:
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
答案 1 :(得分:15)
您需要的只是父视图的ID:
在此示例中,LinearLayout
是所包含的视图中我想要的TextView
的父级。
我现在可以这样做:
View view = findViewById(R.id.include_title_layout);
TextView titleTV = (TextView) view.findViewById(R.id.newsTitleTextView);
titleTV.setText("Whatever");
答案 2 :(得分:5)
在多次包含相同的XML布局时,解决窗口小部件ID存在一个常见的缺陷。 http://www.coboltforge.com/2012/05/tech-stuff-layout/上的博客文章正好解释了这个问题以及如何解决它!
答案 3 :(得分:2)
您确实知道包含的ID。你可以得到那个完整的元素,然后让它的一个孩子从那里开始。
答案 4 :(得分:0)
实际上include
标记包含根布局中的所有元素。因此,您始终可以使用活动上的findViewById
访问它们。
假设您有alayout.xml
,其中有include
布局。现在,您在onCreate
内部的一个活动A中宣布了setContentView(R.layout.alayout)
现在,在您的包含布局中,您可能会有一个ID为myBtn
的按钮。您可以像访问主onCreate
findViewById(R.id.myBtn)
内的访问权限。
答案 5 :(得分:0)
我认为你的意思是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);