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">
我真的是 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">