无法在活动类android.view.ContextThemeWrapper中找到onClick处理程序的方法

时间:2015-07-07 17:11:19

标签: java android onclick

我有这个问题。我正在使用两个对话框,一个对话框上有一个对话框,但第二个对话框在尝试搜索方法时崩溃。有人可以帮帮我吗?

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)

我感谢你的帮助!

1 个答案:

答案 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);
        }
    }); 
}