我的程序要求用户输入他们的名字,然后点击一个名为btn的按钮。单击btn后,它们的名称将动态添加到TableRow以及另一个动态创建的Button。正是这些按钮我遇到了问题。我需要稍后在程序中访问它们。我在res / value文件夹中创建了许多ID来跟踪每个ID(changebtn1,changebtn2等)。它们都存储在名为buttonIDs的数组中。
假设用户输入第一个名称,使用动态创建的按钮创建新行:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tableRow = new TableRow(getApplicationContext());
Button changeButton = new Button(getApplicationContext());
changeButton.setText("Change");
changeButton.setId(buttonIDs[i]);//From res/values
tableRow.addView(changeButton);
tableLayout.addView(tableRow);
i++;
});
现在让我们说他们输入第二个名字,创建另一个Button等等。我现在如何将OnClickListener设置为我创建的第一个Button,其ID为R.id.changeBtn1?换句话说,我有所有这些动态创建的按钮,我不知道如何将OnClickLsteners()添加到早期的按钮或无论如何访问它们。谢谢
答案 0 :(得分:1)
或者您在创建按钮时直接附加OnClickListener,或者您可以存储对按钮的引用,如下所示:
ArrayList<Button> buttons = new ArrayList<Button>();
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tableRow = new TableRow(getContext());
Button changeButton = new Button(getContext());
buttons.add(changeButton);
changeButton.setText("Change");
changeButton.setId(buttonIDs[i]);//From res/values
tableRow.addView(changeButton);
tableLayout.addView(tableRow);
i++;
});
for(Button button: buttons){
button.setOnClickListener(new OnClickListener()
...etc...
);
}
您不会浪费大量内存,因为buttons.add()行不会复制数组中的按钮,只会复制按钮的引用。如果您需要id访问按钮,请使用HashMap,如下所示:
HashMap<String, Button> map = new HashMap<String, Button>();
map.put("id", new Button(getContext()));
然后像这样访问它:
Button button = map.get("id");
答案 1 :(得分:0)
这样的事情
for(int i=0;i<buttonIDs.size();i++) {
Button currentButton = (Button) findViewById(buttonIDs[i]);
currentButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Stuff
}
});
}
我没有检查代码
答案 2 :(得分:0)
@filnik你的回答的第一部分也给了我一个想法。我在OnCreate()方法之外创建了一个OnClickListener方法。
View.OnClickListener changeTeamName(final Button button) {
return new View.OnClickListener() {
public void onClick(View v) {
//Do Stuff
}
};
}
然后我将OnClickListener设置为EACH动态创建的Button并使用我创建的方法。
changeButton.setText("Change");
changeButton.setTag("ButtonOne");
changeButton.setOnClickListener(changeTeamName(changeButton));
现在每个Button都有一个与之关联的OnClickListener,它们现在可以执行我添加到方法中的任何功能。