我可以在Android视图中使用类方法吗?

时间:2016-05-25 13:19:52

标签: java android class view

我是Android(Java)的新手,我的一个教训就是创建这个场景。 enter image description here

他们教导每个按钮使用不同的方法,但这增加了两种方法几乎相同,我的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个公开BasketTeam1BasketTeam2的实例。 它们都很好并且实例很好,因为在我的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'

1 个答案:

答案 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"/>