如何在“包含”布局中访问Button

时间:2011-01-24 20:47:47

标签: android layout include onclick

请参阅文档:http://android-developers.blogspot.com/2009/02/android-layout-tricks-2-reusing-layouts.html

我在包含的布局中有一个按钮,我该如何访问按钮?我不知道id!如何定义OnClickListener ......?

请帮忙......

6 个答案:

答案 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:

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");

答案 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);