我的程序要求用户输入他们的姓名并单击名为 btn 的按钮。单击 btn 后,它们的名称将与另一个动态创建的 Button 一起动态添加到 TableRow。我遇到问题的是这些按钮。我需要稍后在程序中以某种方式访问它们。我在我的 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 设置到我创建的第一个 ID 为 R.id.changeBtn1 的按钮?换句话说,我拥有所有这些动态创建的按钮,但不确定如何将 OnClickLsteners() 添加到较早的按钮或以任何方式访问它们。谢谢
最佳答案
或者您直接在创建按钮时附加 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");
关于android - 在 Android 中使用多个动态创建的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32143177/