2013-03-04 48 views
0

我在Android中设计了一个使用64个按钮的国际象棋棋盘。但是在设计之后,我面临很多问题,因为我需要实现64个OnClickListeners。有没有其他方法可以使用for循环来实现OnClickListener,或者使用按钮设计棋盘是不正确的?设计象棋android中的用户界面

+1

仅仅因为99%的例子使用了“OnClickListener”的匿名子类并不意味着你必须这样做。用一个在类中存储x,y的类和一个用x,y作为参数的构造函数对它进行子类化。 – martijno 2013-03-04 17:38:30

回答

1

是的,可以遍历按钮并为每个按钮添加一个侦听器。里面你的循环,你会做这样的事情:

button.setOnClickListener(new View.OnClickListener() {  
    @Override 
    public void onClick(View v) { 
     // Handle click events... 
    } 
}); 
+0

但每个按钮都有不同的名称(如a1,a2..a8,b1,b2 ... b8),如何在循环中用作按钮ID – 2013-03-04 17:40:25

+0

本文有一些关于如何做到这一点的好信息: http://stackoverflow.com/questions/4809834/how-to-iterate-through-a-views-elements – elevine 2013-03-04 17:51:55

+0

我创建了TableLayout 8个表格,每个表格包含LinearLayout.so中的8个按钮,该帖子中给出的答案将会检查所有这些儿童(包括按钮)或不? – 2013-03-04 18:06:55

3

你应该看看developer samples,它使用了基于网格的游戏板自定义视图特别是井字应用程序。你应该能够扩展这个想法。

如果您想要继续使用每个方块的按钮,您必须知道它们的ID才能创建onClickListener s。有两种方法可以解决这个问题。
要么添加onClickListener在布局XML:

<Button 
parameters... 
onClick="myOnClick" 
</ 

在你Activity那么您可以创建方法myOnClick:为按钮解决方案

public void myOnClick(View clickedView){ 
    //code 
} 

一个可能更好的方式是创建它们从代码中取出并创建xml按钮并添加到当前内容中,或者使用相应的java类创建新按钮:Button myButton e3 = new Button(context);

3

如果你真的想要64个独立的视图,你不需要64个单独的onClickListeners;只需在XML中为视图指定一个onClick属性,全部使用与关联活动相同的方法。然后,您可以在构建时生成一个表来将ID映射到坐标,或者您可以使用您自己的属性将坐标添加到每个视图。

但是,它会为您的棋盘提供单一视图更有意义。这个视图将自己划分为64个方格,维护一个内部表格,指示哪些部分在哪里,在其.onDraw()中绘制正方形和棋子,并在点击时确定点击哪个方块来进行数学运算。在sample Snake应用中研究TileView.java;一旦你了解了这些代码,你就可以轻松地与你的课程相关联。