android - 在 Android 中使用多个动态创建的按钮

标签 android

我的程序要求用户输入他们的姓名并单击名为 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/

相关文章:

android - 如何在用户终止应用程序时启动/重新启动 IntentService

java - 使用DexClassLoader时如何获取Activity中字段的当前值?

android - 水平滑动不同的 ListView

java - Android 应用程序在应用程序最小化并重新聚焦后从头开始启动。

android - 将按钮的文本对齐到底部

java - 安卓。 CPU 使用率过高

android - Android Room 数据库的几种不同崩溃 - 不知道为什么

android - 按下主页按钮后如何停止播放音频?

android - 异步调用后 ListView 未更新

java - 在网格布局中设置行和列的大小