Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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
Java Android向多个按钮添加资源侦听器_Java_Android - Fatal编程技术网

Java Android向多个按钮添加资源侦听器

Java Android向多个按钮添加资源侦听器,java,android,Java,Android,我的Android项目有一个非常奇怪的问题。我有一个2d按钮数组,我正在尝试将动作侦听器添加到这些按钮中。这就是我所拥有的: for ( i = 0; i<buttons.length;i++) { for ( k = 0; k<buttons[i].length;k++) { String but = "mtp" + i + k; buttons[i][k] = (

我的Android项目有一个非常奇怪的问题。我有一个2d按钮数组,我正在尝试将动作侦听器添加到这些按钮中。这就是我所拥有的:

for ( i = 0; i<buttons.length;i++)
       {
           for ( k = 0; k<buttons[i].length;k++)
           {
               String but = "mtp" + i + k;
               buttons[i][k] = (Button)v.findViewWithTag(but);
               if (k%2 == 0)
               {
                   buttons[i][k].setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                            text.setText(words[w]);
                            w++;
                        }
                   });
               }
               else
               {

                   buttons[i][k].setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                            int res = getResources().getIdentifier(icons[p],"drawable", getPackageName());
                            buttons[i][k].setBackgroundResource(res);
                            p++;
                        }
                   });


               }
           }
       }
它很好用。
我该怎么办?如何修复此问题?

这些按钮是否在XML文件中?或者你是想通过编程来实现它?因为您可以在活动中实现OnClickListener

这里有一个替代方案

XML:

这缩短了您必须编写的代码量,并且更易于阅读,因为所有内容都是预先实现的


我知道这并不能完全回答你的问题,但我希望能有所帮助。这就是我到目前为止对使用Java为Android编码的了解。

首先,在匿名类(在
new View.OnClickListener()
实现中)中不能使用
I
k
变量,直到它声明为
final

另外,
text
变量(如我所见,作为对某个TextView对象的引用)也必须是final,因此,它将在每次迭代中引用相同的TextView

你必须改变

buttons[i][k].setBackgroundResource(res);
有点像

((Button)view).setBackgroundResource(res);
因为当调用onClick()处理程序时,
i
k
变量将无效。
但是名为
view
的onClick()参数实际引用了已单击的视图。

很难理解您的问题,,,,,您到底想要什么?显示崩溃的堆栈跟踪。另外,如果您已经有一个2D按钮数组,为什么需要使用
findViewWithTag
查找它们?为什么会崩溃?LogCat怎么说?非常感谢这真的很有帮助
public class YOUNAMEHERE extends Activity implements OnClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}
public void button1 (View v) {
    *The things you want to happen when the button is pressed*
}
buttons[i][k].setBackgroundResource(res);
((Button)view).setBackgroundResource(res);