Как получить доступ к кнопке внутри «включить» макет - PullRequest
34 голосов
/ 24 января 2011

См. Документ: http://android -developers.blogspot.com / 2009/02 / android-layout-tricks-2-reusing-layouts.html

У меня есть кнопка внутри включенного макета, как я могу получить доступ к кнопке? Я не знаю идентификатор! Как я могу определить OnClickListener ...?

Пожалуйста, помогите ...

Ответы [ 6 ]

71 голосов
/ 24 января 2011

Идентификатор, который у вас есть с тегом включения, присваивается корневому представлению включенного макета.Сначала получите ссылку на это представление, используя 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
17 голосов
/ 22 июня 2016

Все, что вам нужно, это идентификатор родительского представления:

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");
5 голосов
/ 30 мая 2012

Существует частая ошибка в разрешении идентификаторов виджетов при многократном включении одного и того же макета XML.Сообщение в блоге на http://www.coboltforge.com/2012/05/tech-stuff-layout/ объясняет именно эту проблему и как ее решить!

2 голосов
/ 24 января 2011

Вы знаете идентификатор включения.Вы можете получить этот полный элемент, а затем получить от него одного из его дочерних элементов.

0 голосов
/ 24 января 2018

Я думаю, что вы имеете в виду 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 голосов
/ 15 декабря 2013

На самом деле include теги включают все элементы вашего корневого макета.Таким образом, вы всегда можете получить к ним доступ, используя findViewById в своей деятельности.

Предположим, у вас есть alayout.xml, в котором есть макет include.Теперь в одном из вашего действия A внутри onCreate вы объявили setContentView(R.layout.alayout) Теперь внутри вашего включаемого макета у вас может быть кнопка с идентификатором myBtn.Вы можете получить к нему доступ внутри onCreate так же, как если бы он был в основном макете: findViewById(R.id.myBtn)

...