我设法在for循环中创建按钮,并且没有理由不在其中声明我的变量。不幸的是,eclipse只识别“bt”并且不想用它在循环中表示的数字替换我的[i],因此在我的布局中找到正确的id。有关如何使这项工作的任何想法?我也很高兴任何其他解决方案像我一样美丽,这不起作用;)
Button [] bt = new Button[6];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start_layout);
bt[0] = (Button) findViewById(R.id.bt0);
bt[1] = (Button) findViewById(R.id.bt1);//This is what i'm trying to replace
bt[2] = (Button) findViewById(R.id.bt2);
bt[3] = (Button) findViewById(R.id.bt3);
bt[4] = (Button) findViewById(R.id.bt4);
bt[5] = (Button) findViewById(R.id.bt5);
for (int i=0; i<6; i++) {
final int b = i;
bt [i] = (Button)findViewById(R.id.bt[i]); <----//Whith this
bt [i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myIntent = new Intent(Start.this, MainActivity.class);
myIntent.putExtra("players", b);
startActivity(myIntent);
//startActivity(new Intent(Start.this, MainActivity.class));
}
});
}
}
答案 0 :(得分:11)
我会做以下事情:
private static final int[] idArray = {R.id.bt0, R.id.bt1, R.id.bt2, R.id.bt3, R.id.bt4, R.id.bt5};
private Button[] bt = new Button[idArray.length];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start_layout);
for (int i=0; i<idArray.length; i++) {
final int b = i;
bt [b] = (Button)findViewById(idArray[b]); // Fetch the view id from array
bt [b].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myIntent = new Intent(Start.this, MainActivity.class);
myIntent.putExtra("players", b);
startActivity(myIntent);
//startActivity(new Intent(Start.this, MainActivity.class));
}
});
}
}
如果您想添加或删除按钮,只需将其添加到idArray
,其他所有内容都已动态显示。
答案 1 :(得分:0)
我认为如果你有一组相似的按钮 - 它们都放在布局中的1个父级内(LinearLayout或RelativeLayout或其他东西)。您可以获取父母并检索所有孩子。这样您就不需要为每个按钮指定id。
ViewGroup buttonsView = (ViewGroup) findViewById(R.id.buttons);
List<Button> buttons = new ArrayList<Button>();
for (int i = 0; i < buttonsView.getChildCount(); i++) {
buttons.add((Button) buttonsView.getChildAt(i));
}
此外,您可以将按钮的编号存储在其标记中,这样您就不需要创建final int
个变量:
ViewGroup buttonsView = (ViewGroup) findViewById(R.id.buttons);
List<Button> buttons = new ArrayList<Button>();
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myIntent = new Intent(Start.this, MainActivity.class);
myIntent.putExtra("players", (Integer) v.getTag());
startActivity(myIntent);
//startActivity(new Intent(Start.this, MainActivity.class));
}
};
for (int i = 0; i < buttonsView.getChildCount(); i++) {
Button button = (Button) buttonsView.getChildAt(i);
button.setTag(i);
button.setOnClickListener(listener);
buttons.add(buttons);
}