2012-06-18 2 views
3

Вместо префикса id в xml, можно ли указать конкретный макет кода? Например, если у меня есть 3 макета, каждый из которых имеет кнопку с идентификатором «btn». Можно ли указать, какой макет для findViewById (R.id.btn)?findViewById в определенном макете?

+0

он будет искать этот идентификатор в том, который вы накачанные через inflate или setcontentView – Raykud

ответ

2

Основной контекст определяется с помощью setContentView(R.lyaout.my_layout). Если вы раздуваете другой макет, используя LayoutInflater.inflate(), вы получаете объект макета, позвоните ему buttonLayout. Теперь вы можете отличаться от this.findViewById(R.id.button) и buttonLayout.findViewById(R.id.button), и обе они дадут вам разные ссылки на кнопки.

3

findViewById - это метод класса View. Вы можете указать, где вид следует искать как тот

final View container = new View(context); 
container.findViewById(R.id.btn); 
+0

это также метод класса 'Activity' – WarrenFaith

0

Если ваш контентный вид представляет собой сложную иерархию, которая имеет несколько видов с идентификатором btn, вам нужно будет перейти к поддереву иерархии и выполнить поиск там. Предположим, у вас есть три вида LinearLayout, каждый из которых имеет вид btn. Если вы можете сначала выбрать правильный LinearLayout (по идентификатору, тегу, позиции или некоторым другим средствам), вы можете найти правильный вид btn. Если соответствующий LinearLayout имеет идентификатор branch1, например:

View parent = findViewById(R.id.branch1); // Activity method 
View btn = parent.findViewById(R.id.btn); // View method 
0

, если у вас есть внутри различных кнопок BTN Viewgroups, это возможно, но требует, чтобы дать ViewGroups другое имя! Easyiest будет для этой цели, чтобы определить расположение Баттона внутри своего собственного XML (т.е. button_layout.xml) внутри вашей деятельности вы можете сделать это:

public MyActivity extends Activity{ 

    Button btn1, btn2, btn3; 

    public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 

    LinearLayout ll = new LinearLayout(this); 
    setContentView(ll); 

    btn1 = (Button)inflater.inflate(R.layout.button_layout, ll); 
    btn2 = (Button)inflater.inflate(R.layout.button_layout, ll); 
    btn3 = (Button)inflater.inflate(R.layout.button_layout, ll); 

    } 
} 
Смежные вопросы