我正在处理的应用的活动上有几个按钮。
我有每个存储在数组中的文本(数据可以更改),我试图用for循环更新所有这些文本。
Id是button1,button2和button3
这就是我想要的
for(int i=1; i<=splitter.length; i++){
Button button = (Button)findViewById(R.id.button[i]);//<---How do i make this work
button.setText(spliter[i-1]);
}
答案 0 :(得分:6)
作为一个简单的解决方案,您应该尝试迭代包含视图的子项:
考虑到你的按钮都在布局中,如下所示:
<LinearLayout
android:id="@+id/layout_container_buttons"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button2"/>
</LinearLayout>
然后只需简单地遍历所有Layout子项:
ViewGroup layout = (ViewGroup)findViewById(R.id.layout_container_buttons);
for (int i = 0; i < layout.getChildCount(); i++) {
View child = layout.getChildAt(i);
if(child instanceof Button)
{
Button button = (Button) child;
button.setText(spliter[i]);
}
}
但是,更好的方法是根据数组大小动态创建按钮,并将它们添加到LinearLayout,而不是在layout.xml文件中复制/粘贴它们。每次您想要添加/删除某些内容时,这将有助于您获得阵列上每个值的确切按钮数。
ViewGroup layout = (ViewGroup) findViewById(R.id.layout_container_buttons);
for (int i = 0; i < splitter.length; i++) // iterate over your array
{
// Create the button
Button button = new Button(this);
button.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
button.setText(splitter[i]);
layout.addView(button); // add to layout
}
答案 1 :(得分:3)
for (int i = 1; i <= splitter.length; i++) {
Button button = (Button) findViewById(getResources().getIdentifier("button" + i, "id",
this.getPackageName()));
button.setText(spliter[i - 1]);
}
希望它有所帮助。
答案 2 :(得分:0)
按钮的实例名称将相同。就像会有多个同名实例一样。你将如何区分按钮。