Android 将参数从布局传递到活动
我正在从谷歌创建的Udacity学习android开发,在一个练习中,它被要求为两支打篮球的球队创建一个得分记录Android 将参数从布局传递到活动,android,android-layout,Android,Android Layout,我正在从谷歌创建的Udacity学习android开发,在一个练习中,它被要求为两支打篮球的球队创建一个得分记录该应用程序看起来像: 你可以猜出每个按钮的作用 为此,他们为每个按钮创建了6个方法(AddThreePointToTama,AddTwoPointToTama…)。但我认为,如果我可以传递一个int参数,对应于每个方法要添加的点数,那么两个方法(addTeamA,addTeamB)就足够了。 所以我想知道是否有可能做到这一点?如果没有,原因是什么? 先谢谢你 编辑 以下是我想做的:
该应用程序看起来像: 你可以猜出每个按钮的作用
为此,他们为每个按钮创建了6个方法(AddThreePointToTama,AddTwoPointToTama…)。但我认为,如果我可以传递一个int参数,对应于每个方法要添加的点数,那么两个方法(addTeamA,addTeamB)就足够了。
所以我想知道是否有可能做到这一点?如果没有,原因是什么?
先谢谢你
编辑
以下是我想做的: 在layout.xml中:
<Button
...
android:text="+3 POINTS"
android:onClick="addThreeTeamA(3)"
/>
答案很简单,你绝对可以做到 我会说,想想你的设计吧 以下是我的建议:
// Setup an interface for common team behaviors
interface Team {
void addPoints(int points);
int getPoints();
}
// implement that interface per Team
class TeamA implements Team {
private int points;
public TeamA(){
this.points = 0;
}
@Override
public void addPoints(int points){
this.points += points;
}
@Override
public int getPoints(){
return this.points;
}
}
对TeamB也一样
然后在“活动”或任何要从中添加调用的类中创建一个方法:
public void addPoints(int points, Team team){
team.addPoints(points);
}
祝你好运和快乐 答案很简单,你绝对可以做到 我会说,想想你的设计吧 以下是我的建议:
// Setup an interface for common team behaviors
interface Team {
void addPoints(int points);
int getPoints();
}
// implement that interface per Team
class TeamA implements Team {
private int points;
public TeamA(){
this.points = 0;
}
@Override
public void addPoints(int points){
this.points += points;
}
@Override
public int getPoints(){
return this.points;
}
}
对TeamB也一样
然后在“活动”或任何要从中添加调用的类中创建一个方法:
public void addPoints(int points, Team team){
team.addPoints(points);
}
祝你好运和快乐 他们创造了6种方法让你更好地理解。一旦你得到了他们想要的表演,你就可以提高它。是的,您可以通过为团队A和B制定通用方法来增强它。它完全取决于您的逻辑。希望我能回答你的问题。他们创建了6种方法,让你更好地理解。一旦你得到了他们想要的表演,你就可以提高它。是的,您可以通过为团队A和团队B创建通用方法来增强它。这完全取决于您的逻辑。希望我能回答您的问题。从技术上讲,仅实现一次单击侦听器是可能的,但不能按照您要求的方式实现,因为无法将参数传递给单击侦听器。相反,您需要为每个按钮定义
android:id
,并使用这种方法
public void buttonClicked(View v) {
switch (v.getId()) {
case R.id.btnAddTeamAThree:
// Add 3 points to Team A
break;
case R.id.btnAddTeamATwo:
// Add 2 points to Team A
break;
case R.id.btnAddTeamBThree:
// Add 3 points to Team B
break;
case R.id.btnAddTeamBTwo:
// Add 2 points to Team B
break;
...
}
}
从技术上讲,只实现一次单击侦听器是可能的,但不能按照您要求的方式实现,因为无法将参数传递给单击侦听器。相反,您需要为每个按钮定义
android:id
,并使用这种方法
public void buttonClicked(View v) {
switch (v.getId()) {
case R.id.btnAddTeamAThree:
// Add 3 points to Team A
break;
case R.id.btnAddTeamATwo:
// Add 2 points to Team A
break;
case R.id.btnAddTeamBThree:
// Add 3 points to Team B
break;
case R.id.btnAddTeamBTwo:
// Add 2 points to Team B
break;
...
}
}
谢谢您的评论,但我正在考虑从布局中传递参数,请参见edit@aName这是不可能的,因为来自xml的onClick无法处理args。监听器需要传递一个参数a
View
,这就是我想知道的。因此,将参数从布局传递到活动的最佳解决方案是使用标记@nuuneoi saidthank you获取您的注释,但我正在考虑从布局传递参数,请参见edit@aName这是不可能的,因为来自xml的onClick无法处理args。监听器需要传递一个参数aView
,这就是我想知道的。因此,将参数从布局传递到活动的最佳解决方案是使用标记@nuneoi saidt感谢您的响应,这是一个很好的解决方案,我想到了,但我希望在编辑器中有类似的东西实际上还有另一种方法,那就是声明android:tag
,并通过v.getTag()
将其作为侦听器函数中的参数读取,例如,
感谢您的响应,这是一个很好的解决方案,我想到了,但我希望在edit中有类似的东西实际上还有另一种方法,那就是声明android:tag
,并通过v.getTag()
将其作为侦听器函数中的参数读取,例如,