Java “如何调试”;在android的父或祖先上下文中找不到showTimePickerDialog(视图)方法;?
当我启动应用程序时,它会正常工作,直到按下按钮时关闭。我在下面留下我的代码和错误:Java “如何调试”;在android的父或祖先上下文中找不到showTimePickerDialog(视图)方法;?,java,android,android-studio,Java,Android,Android Studio,当我启动应用程序时,它会正常工作,直到按下按钮时关闭。我在下面留下我的代码和错误: package app.alexdickson.com.workout1; import android.app.Dialog; import android.app.TimePickerDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; impo
package app.alexdickson.com.workout1;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TimePicker;
import android.widget.Toast;
public class Main2Activity extends AppCompatActivity implements View.OnClickListener {
ImageButton botoFlexio;
ImageButton botoAbdominals;
static final int DIALOG_ID = 0;
int hour_x;
int minute_x;
int hourDefinitivaFlexio;
int minuteDefinitvaFlexio;
int hourDefinitivaAbs;
int minuteDefinitivaAbs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
botoFlexio = (ImageButton) findViewById(R.id.botoFlexio);
botoAbdominals = (ImageButton) findViewById(R.id.botoAbdominals);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.botoFlexio:
botoFlexio.setBackgroundResource(R.drawable.flexioclicat);
showDialog(DIALOG_ID);
hourDefinitivaFlexio = hour_x;
minuteDefinitvaFlexio = minute_x;
break;
case R.id.botoAbdominals:
botoFlexio.setBackgroundResource(R.drawable.abdominalsclicat);
showDialog(DIALOG_ID);
hourDefinitivaAbs = hour_x;
minuteDefinitivaAbs = minute_x;
break;
}
}
@Override
protected Dialog onCreateDialog(int id) {
if (id == DIALOG_ID)
return new TimePickerDialog(Main2Activity.this, kTimePickerListener, hour_x, minute_x, true);
return null;
}
protected TimePickerDialog.OnTimeSetListener kTimePickerListener =
new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
hour_x = hourOfDay;
minute_x = minute;
Toast.makeText(Main2Activity.this, hour_x + ": " + minute_x, Toast.LENGTH_LONG).show();
}
};
}
以下是我的错误:
03-25 22:02:31.805 1555-1555/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: app.alexdickson.com.workout1, PID: 1555
java.lang.IllegalStateException: Could not find method showTimePickerDialog(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatImageButton with id 'botoAbdominals'
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:307)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:266)
at android.view.View.performClick(View.java:4780)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
03-25 22:02:31.879 340-697/? W/ActivityManager: Force finishing activity 1 app.alexdickson.com.workout1/.Main2Activity
我的XML如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="2"
android:orientation="horizontal"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
<ImageButton
android:layout_width="0dp"
android:layout_height="400dp"
android:layout_weight="1"
android:id="@+id/botoAbdominals"
android:background="@drawable/abdominals"
android:contentDescription="ImatgeAbdominals"
android:layout_marginTop="50dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:onClick="showTimePickerDialog" />
<ImageButton
android:layout_width="0dp"
android:layout_height="400dp"
android:layout_weight="1"
android:id="@+id/botoFlexio"
android:layout_gravity="top"
android:layout_marginTop="50dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@drawable/flexio"
android:contentDescription="ImatgeFlexio"
android:onClick="showTimePickerDialog"/>
</LinearLayout>
似乎您在xml中定义了一个
android:onClick=“showTimePickerDialog”
方法,当您为id为的ImageButton单击该方法时,将调用该方法
检查您的xml。您的活动中没有此类方法。在xml中,您声明,单击按钮时调用的方法:
android:onClick="showTimePickerDialog"
但是在java代码中没有这样的方法。事实上,错误在于:
java.lang.IllegalStateException: Could not find method showTimePickerDialog(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatImageButton with id 'botoAbdominals'
但是您有一个onClick(视图v)。
在您的xml上尝试:
android:onClick="onClick"
您也可以发布相关的XML布局文件吗?请记住以后的问题:不要使用像“为什么这不起作用”这样的通用标题。想象一下每个人都会这么做谢谢Mattias!作品完美现在:D