我有这个问题。我正在使用两个对话框,一个对话框上有一个对话框,但第二个对话框在尝试搜索方法时崩溃。有人可以帮帮我吗?
XML:登录电子邮件
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/forgot_password_email"
android:id="@+id/login_email_tvForgetPassword"
android:layout_marginTop="18dp"
android:layout_gravity="center_horizontal"
android:onClick="openForgetPasswordSend"/>
MainActivity.java
public void openForgetPasswordSend(View view){
FragmentManager fragmentManager = getFragmentManager();
loginforgetpasswordDialogFragment.show(fragmentManager,"Forget Pass");
}
LoginForgetPassword.java
public class LoginForgetPassword extends DialogFragment{
@Override
public Dialog onCreateDialog (Bundle savedInstanceState){
// 1. Instantiate an AlertDialog.Builder with its constructor
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
//Get the Layout inflater
//LayoutInflater inflater = getActivity().getLayoutInflater();
LayoutInflater factory = LayoutInflater.from(getActivity());
//Create Dialog
Dialog dialog = new Dialog(getActivity());
//Diable title
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
// builder.setView(inflater.inflate(R.layout.login_register, null));
dialog.setContentView(R.layout.login_forgetpassword);
// Transparency
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// 3. Get the AlertDialog from create()
//return builder.create();
return dialog;
}
错误:
java.lang.IllegalStateException: Could not find a method openForgetPasswordSend(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.TextView with id 'login_email_tvForgetPassword'
at android.view.View$1.onClick(View.java:4209)
at android.view.View.performClick(View.java:5156)
at android.view.View$PerformClick.run(View.java:20755)
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:5832)
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: openForgetPasswordSend [class android.view.View]
at java.lang.Class.getMethod(Class.java:665)
at android.view.View$1.onClick(View.java:4202)
at android.view.View.performClick(View.java:5156)
at android.view.View$PerformClick.run(View.java:20755)
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:5832)
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)
我感谢你的帮助!
答案 0 :(得分:0)
我不是专家,但是,请不要设置android:onClick="openForgetPasswordSend"
在XML布局中设置点击事件是不好的做法。
在java中设置所有单击侦听器。使用您的XML,只是为了设置视图。
崩溃的原因可能是,您在xml中指定的方法没有参数,但在类中,该方法的参数类型为View。
public void openForgetPasswordSend(View view){...}
现在,我建议您尝试下面的代码,这应该可以解决您的问题:
删除
来自android:onClick="openForgetPasswordSend"
<TextView>
我看不到你在哪里使用layout'login-email.xml'。在该片段中(我假设它在一个片段中),将这些行添加到:
public class MyFragment extends Fragment {
private TextView myTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
mytextView = (TextView)findViewById(R.id.login_email_tvForgetPassword);
myTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openForgetPasswordSend(view);
}
});
}