2012-06-18 52 views
3

而不是在xml中为id加前缀,是否可以在代码中指定特定的布局?例如,如果我有3个布局,每个布局都带有一个ID为“btn”的按钮。是否可以指定哪个布局来查找ViewById(R.id.btn)?findViewById在特定的布局?

+0

它会搜索该ID在您通过膨胀的一个inflate或setcontent查看 – Raykud

回答

2

基本上下文通过setContentView(R.lyaout.my_layout)定义。如果你使用LayoutInflater.inflate()膨胀另一个布局,你会得到一个布局对象,我们称它为buttonLayout。您现在可以在this.findViewById(R.id.button)buttonLayout.findViewById(R.id.button)之间有所不同,两者都会为您提供不同的按钮引用。

3

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

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

它也是一个Activity类的方法 – WarrenFaith

0

如果你的内容视图是一个复杂的层次结构与ID btn多个视图,您需要导航到层次的子树,并从那里寻找。假设您有三个LinearLayout视图,每个视图中都有一个btn视图。如果你可以先选择正确的LinearLayout(通过ID,标签,位置,或其他方式),然后你可以找到正确的btn视图。如果相关LinearLayoutbranch1 ID,例如:

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

,如果你有不同的Viewgroups里面你btns,这是可能的,但需要给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); 

    } 
}