XML / Java 使用Button编辑TextView时Could not find method错误

XML / Java Could not find method error when Button is used to edit TextView

我真的是 Java 编码的新手,我正在尝试创建一个 android 应用程序(我希望它计算我举重的最大一次重复次数)sp,它将使用按钮按下更新文本视图。每当我尝试按下任何按钮时,我当前使用的代码都会导致我的应用程序崩溃。

这是我的 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:src="@drawable/weightbackground" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="16dp"
        android:text="Reps"
        android:textAllCaps="true"
        android:textColor="@android:color/white"
        android:textSize="24sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="16dp">

        <Button
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:onClick="decrementReps"
            android:text="-"
            android:theme="@android:style/Theme.Holo" />

        <TextView
            android:id="@+id/repQuantity_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            android:text="0"
            android:textColor="@android:color/white"
            android:textSize="20sp" />

        <Button
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:onClick="incrementReps"
            android:text="+"
            android:theme="@android:style/Theme.Holo" />

    </LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="16dp"
        android:text="Weight"
        android:textAllCaps="true"
        android:textColor="@android:color/white"
        android:textSize="24sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingBottom="16dp">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <Button
                android:layout_width="wrap_content"
                android:layout_height="48dp"
                android:onClick="decrementWeightSmall"
                android:text="- 10 lbs"
                android:theme="@android:style/Theme.Holo" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="48dp"
                android:onClick="decrementWeightMedium"
                android:text="- 25 lbs"
                android:theme="@android:style/Theme.Holo" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="48dp"
                android:onClick="decrementWeightLarge"
                android:text="- 45 lbs"
                android:theme="@android:style/Theme.Holo" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <TextView
                android:id="@+id/weightQuantity_text_view"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:paddingLeft="8dp"
                android:paddingRight="8dp"
                android:paddingTop="40dp"
                android:text="0 lbs"
                android:textColor="@android:color/white"
                android:textSize="20sp" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:theme="@android:style/Theme.Holo"
                android:layout_marginTop="32dp"
                android:onClick="resetWeight"
                android:text="Reset"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <Button
                android:layout_width="wrap_content"
                android:layout_height="48dp"
                android:onClick="incrementWeightSmall"
                android:text="+ 10 lbs"
                android:theme="@android:style/Theme.Holo" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="48dp"
                android:onClick="incrementWeightMedium"
                android:text="+ 25 lbs"
                android:theme="@android:style/Theme.Holo" />

            <Button
                android:layout_width="wrap_content"
                android:layout_height="48dp"
                android:onClick="incrementWeightLarge"
                android:text="+ 45 lbs"
                android:theme="@android:style/Theme.Holo" />

        </LinearLayout>

    </LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="16dp"
        android:text="One Rep Max"
        android:textAllCaps="true"
        android:textColor="@android:color/white"
        android:textSize="24sp" />

    <TextView
        android:id="@+id/maxRepQuantity_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingBottom="16dp"
        android:text="0 lbs"
        android:textColor="@android:color/white"
        android:textSize="20sp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="calculateMax"
        android:text="Calculate Max"
        android:theme="@android:style/Theme.Holo" />

</LinearLayout>

</RelativeLayout>

这是我当前的 Java 代码:

package com.example.android.maxreps;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

int reps = 0;
int weight = 0;
int maxReps = 0;

public void decrementReps(View view) {
    reps = reps - 10;
    displayReps(reps);
}

public void incrementReps(View view) {
    reps = reps + 10;
    displayReps(reps);
}

public void decrementWeightSmall(View view) {
    weight = weight - 10;
    displayWeight(weight);
}

public void decrementWeightMedium(View view) {
    weight = weight - 25;
    displayWeight(weight);
}

public void decrementWeightLarge(View view) {
    weight = weight - 45;
    displayWeight(weight);
}

public void incrementWeightSmall(View view) {
    weight = weight + 10;
    displayWeight(weight);
}

public void incrementWeightMedium(View view) {
    weight = weight + 25;
    displayWeight(weight);
}

public void incrementWeightLarge(View view) {
    weight = weight + 45;
    displayWeight(weight);
}

public void resetWeight(View view) {
    weight = 0;
    displayWeight(weight);
}

public void calculateMax(View view) {
    maxReps = weight * (1 + (reps / 30)) + 1;
    displayMax(maxReps);
}

private void displayReps(int number) {
    TextView repQuantityTextView = (TextView) findViewById(
            R.id.repQuantity_text_view);
    repQuantityTextView.setText("" + number);
}

private void displayWeight(int number) {
    TextView weightQuantityTextView = (TextView) findViewById(
            R.id.weightQuantity_text_view);
    weightQuantityTextView.setText("" + number + " lbs");
}

private void displayMax(int number) {
    TextView maxRepQuantityTextView = (TextView) findViewById(
            R.id.maxRepQuantity_text_view);
    maxRepQuantityTextView.setText("" + number + " lbs");
}
}

当我尝试按下按钮时,例如“+”代表按钮,这是我的错误日志:

Process: com.example.android.maxreps, PID: 20481
java.lang.IllegalStateException: Could not find a method incrementReps(View)   in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.support.v7.widget.AppCompatButton
        at android.view.View.onClick(View.java:4260)
        at android.view.View.performClick(View.java:5217)
        at android.view.View$PerformClick.run(View.java:20983)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:6141)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: java.lang.NoSuchMethodException: incrementReps [class android.view.View]
        at java.lang.Class.getMethod(Class.java:665)
        at android.view.View.onClick(View.java:4253)
        at android.view.View.performClick(View.java:5217)
        at android.view.View$PerformClick.run(View.java:20983)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:145)
        at android.app.ActivityThread.main(ActivityThread.java:6141)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

感谢您提供的所有帮助。非常感谢。

您始终可以通过编程方式处理此操作,只需从按钮中删除 android:onClick 并添加 onCreate

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ...
    }
});

或者在您的 activity 中延伸自 Activity 而不是 AppCompatActivity

从 xml 布局文件中的任何地方删除这一行

android:theme="@android:style/Theme.Holo"

并在 values 和 values-v21 文件夹 styles.xml 中设置主题

 <style name="AppTheme" parent="Theme.AppCompat">