我是Android(Java)的新手,我的一个教训就是创建这个场景。
他们教导每个按钮使用不同的方法,但这增加了两种方法几乎相同,我的DRY头脑说它不是最好的解决方案。
Sho我写了一个BasketTeam
课程:
package com.example.android.courtcounter;
import android.view.View;
import android.widget.TextView;
public class BasketTeam {
private TextView team;
public BasketTeam(View v) {
team = (TextView) v;
}
public void threePointsThrow(View v) {
this.addPoints(3);
}
public void twoPointsThrow(View v) {
addPoints(2);
}
public void freeThrow(View v) {
addPoints(1);
}
private void addPoints(Integer addedScore) {
Integer teamScore = Integer.parseInt((String) team.getText());
team.setText("" + (teamScore + addedScore));
}
public void resetScore() {
team.setText("" + 0);
}
}
在我的MainActivity中,我创建了2个公开BasketTeam1
和BasketTeam2
的实例。
它们都很好并且实例很好,因为在我的MainActivity中我有一个名为resetScore
的方法使用它们并且它可以工作:
public void resetScore(View v) {
BasketTeam1.resetScore();
BasketTeam2.resetScore();
}
但是当我尝试在我的视图中使用其中一个类方法时,它无法找到。 为什么呢?
以下是我尝试的示例:
<Button
android:layout_height="wrap_content"
android:layout_width="120dp"
android:text="+3 points"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:id="@+id/team_1_3_points"
android:background="@color/colorAccent"
android:textColor="@android:color/white"
android:onClick="BasketTeam1.threePointsThrow"/>
更新
这是错误消息:
05-25 13:30:19.880 2345-2345 / com.example.android.courtcounter E / AndroidRuntime:FATAL EXCEPTION:main 过程:com.example.android.courtcounter,PID:2345 java.lang.IllegalStateException:无法在父级或祖先语句中找到方法BasketTeam1.threePointsThrow(View)用于android:onClick属性在视图类android.support.v7.widget.AppCompatButton上定义,ID为'team_1_3_points'
答案 0 :(得分:2)
Button的onClick
属性必须与Button的上下文中的方法相对应,通常是您的MainActivity
。请参阅onClick。
解决方案可能是:
public class MainActivity extends Activity {
...
public void threePointsThrow(View v) {
switch (v.getId()) {
case R.id.team_1_3_points:
basketTeam1.threePointsThrow();
break;
case R.id.team_2_3_points:
basketTeam2.threePointsThrow();
break;
default:
break;
}
}
}
在布局中:
<Button
android:layout_height="wrap_content"
android:layout_width="120dp"
android:text="+3 points"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:id="@+id/team_1_3_points"
android:background="@color/colorAccent"
android:textColor="@android:color/white"
android:onClick="threePointsThrow"/>