findViewById在特定的布局?

时间:2012-06-18 22:16:04

标签: android

是否可以在代码中指定特定的布局,而不是在xml中为id添加前缀?例如,如果我有3个布局,每个布局都有一个id为“btn”的按钮。是否可以在?

中指定findViewById(R.id.btn)的布局

4 个答案:

答案 0 :(得分:3)

findViewByIdView类的方法。您可以指定应该搜索视图的位置

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

答案 1 :(得分:2)

基本上下文是通过setContentView(R.lyaout.my_layout)定义的。如果您使用LayoutInflater.inflate()为另一个布局充气,则会获得一个布局对象,我们可以将其称为buttonLayout。您现在可以在this.findViewById(R.id.button)buttonLayout.findViewById(R.id.button)之间进行区分,并且两者都会为您提供不同的按钮参考。

答案 2 :(得分:0)

如果您的内容视图是具有多个ID为btn的视图的复杂层次结构,则需要导航到层次结构的子树并从那里进行搜索。假设您有三个LinearLayout个视图,每个视图中都有一个btn视图。如果您可以先选择正确的LinearLayout(按ID,标记,位置或其他方式),则可以找到正确的btn视图。如果相关LinearLayout的ID为branch1,例如:

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

答案 3 :(得分:0)

如果您的btns位于不同的Viewgroups中,则可以,但需要为ViewGroups提供不同的名称!最简单的就是为此目的在自己的XML中定义Button的布局(即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);

  }
}