Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从一个clicklistener引用特定按钮_Android_Arrays_Android Layout_Android Button_Android Tablelayout - Fatal编程技术网

Android 从一个clicklistener引用特定按钮

Android 从一个clicklistener引用特定按钮,android,arrays,android-layout,android-button,android-tablelayout,Android,Arrays,Android Layout,Android Button,Android Tablelayout,我在计算如何使用我添加到TableLayout的按钮列表中的一个唯一按钮时遇到了一个问题,该列表是从一个数组添加到TableLayout的 下面是我用来完成这项工作的代码,我现在看到的行为自然是按钮都会响应侦听器。我希望被点击的按钮和单独的按钮以某种方式运行 我在数组中的按钮声明上尝试了setTagi的组合,然后在侦听器中获取并使用该值作为数组的索引,但没有效果 我还测试了从数组中为索引0处的按钮显式指定监听器,它真正做的是只向指定的按钮添加监听器,但是当单击该按钮时,其余按钮也会响应 理想情况

我在计算如何使用我添加到TableLayout的按钮列表中的一个唯一按钮时遇到了一个问题,该列表是从一个数组添加到TableLayout的

下面是我用来完成这项工作的代码,我现在看到的行为自然是按钮都会响应侦听器。我希望被点击的按钮和单独的按钮以某种方式运行

我在数组中的按钮声明上尝试了setTagi的组合,然后在侦听器中获取并使用该值作为数组的索引,但没有效果

我还测试了从数组中为索引0处的按钮显式指定监听器,它真正做的是只向指定的按钮添加监听器,但是当单击该按钮时,其余按钮也会响应

理想情况下,下面的代码就是我想要实现的,只要点击按钮,按钮的宽度就会增加到300px左右。当我在其他项目中做的比我记忆中更多的时候,我被这件事吓坏了

任何帮助都将不胜感激,谢谢

private void initializeTableRows(TableLayout stringsTable) {
    // TODO Auto-generated method stub
    String[] strings = { "d", "g", "d", "g", "b", "d" };
    addRowsToTable(strings, stringsTable);
}

private void addRowsToTable(String[] strings, TableLayout stringsTable) {
    TableRow tableRows[] = new TableRow[strings.length];
    Button[] stringNames = new Button[strings.length];
    final Button[] tuneButtons = new Button[strings.length];

    for (int i = 0; i < strings.length; i++) {
        stringNames[i] = new Button(this);
        stringNames[i].setBackgroundResource(R.drawable.red_frame);
        stringNames[i].setText(strings[i].toUpperCase());
        stringNames[i].setTextColor(Color.WHITE);

        tuneButtons[i] = new Button(this);
        tuneButtons[i].setBackgroundResource(R.drawable.red_frame);
        tuneButtons[i].setTextColor(Color.WHITE);
        tuneButtons[i].setText("Tune");

        tuneButtons[i].setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Button clickedButton = (Button) v;
                clickedButton.setWidth(300);
            }
        });

            tableRows[i] = new TableRow(this);
        tableRows[i].addView(stringNames[i]);
        tableRows[i].addView(tuneButtons[i]);


        tableRows[i].setPadding(0, 0, 0, 40);

        stringsTable.addView(tableRows[i]);
    }
}

它一直在工作,我只是错误地在按钮上使用了setWidth。我这样说是错误的,因为现在我只是用setText测试了一下,文本只针对有问题的按钮进行了更改,没有针对其他任何东西进行更改


但是,当文本发生变化时,我确实意识到,tableLayout中的所有其他按钮也随着相关按钮的扩展而扩展,以适应正在设置的新文本的大小。这是TableLayout以这种不必要的方式运行的错误。

您可以使用setId、getId来确定单击了哪个按钮。在每个tuneButtons[i]创建时,我都使用了setId,而在onClick中,我使用了v.getId并取回了ID。之后,我尝试了tuneButtons[id].setWidth400,但仍然看到列表中的所有按钮都受到影响。这就是为什么我如此惊讶,我已经尝试了所有我可能会在评论中看到的东西!感谢您的回答。如果您查看代码,行为完全符合预期。通过使用循环,一个监听器被添加到按钮数组中。所有按钮都得到相同的侦听器,声明相同的行为。。。所以即使我说setId像tunebutions[I].setIdi;然后在onClick里面我说int buttonId=v.getId;tuneButtons[buttonId].setWidth400。。这种推理将适用于数组中的所有按钮,我看不到任何区别