android - 无法在 Android 应用程序的对话框中设置 OnClickListener

标签 android

我无法在 Android 应用程序的对话框中设置 OnClickListener。它以错误结束。日志是:

01-10 12:35:45.792: ERROR/AndroidRuntime(918): FATAL EXCEPTION: main
01-10 12:35:45.792: ERROR/AndroidRuntime(918): java.lang.NullPointerException
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.htmleditor.MainActivity.onCreateDialog(MainActivity.java:169)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.app.Activity.onCreateDialog(Activity.java:2482)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.app.Activity.createDialog(Activity.java:882)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.app.Activity.showDialog(Activity.java:2557)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.app.Activity.showDialog(Activity.java:2524)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.htmleditor.MainActivity$2.onClick(MainActivity.java:106)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.view.View.performClick(View.java:2485)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.view.View$PerformClick.run(View.java:9080)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.os.Handler.handleCallback(Handler.java:587)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.os.Looper.loop(Looper.java:123)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at android.app.ActivityThread.main(ActivityThread.java:3647)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at java.lang.reflect.Method.invokeNative(Native Method)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at java.lang.reflect.Method.invoke(Method.java:507)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-10 12:35:45.792: ERROR/AndroidRuntime(918):     at dalvik.system.NativeStart.main(Native Method)
01-10 12:35:48.002: ERROR/InputDispatcher(67): channel '4065a710 android.htmleditor/android.htmleditor.MainActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
01-10 12:35:48.012: ERROR/InputDispatcher(67): channel '4065a710 android.htmleditor/android.htmleditor.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!

我有两个版本的代码。两者都引发错误

MainActivity,函数Oncreate()

insertImage.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                  Dialog dialog = new Dialog(MainActivity.this);
                    dialog.setContentView(R.layout.dialogimage);
                    dialog.setTitle("Insert image");
                    final EditText fieldForURL = (EditText)findViewById(R.id.fieldForURL);
                    Button on = (Button)findViewById(R.id.okImage);
                    on.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            visualPane.getText().insert(visualPane.getSelectionEnd(),"<img src=\"" + fieldForURL.getText().toString() + "\">");  

                        }
                    });
                    dialog.setCancelable(true);
                    dialog.show();


                //showDialog(IDD_CUSTOM_INSERT_IMAGE);

            }
        });

或函数 OnCreateDialog()

@Override
protected Dialog onCreateDialog(int id) {
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);  
    AlertDialog.Builder alert = new AlertDialog.Builder(this); 

    alert.setTitle("Create table");
    alert.setCancelable(false);

    Dialog dialog = null;
    dialog = new Dialog(this);
    switch (id) {
        case IDD_CUSTOM_INSERT_TABLE:

            dialog.setTitle("Insert table");
            dialog.setContentView(R.layout.dialogtable);   

            okTableDialog =  (Button)findViewById(R.id.okTable);
            cancelTableDialog = (Button)findViewById(R.id.okTable);
            fieldForRows = (EditText)findViewById(R.id.entry01);
            fieldForColumns = (EditText)findViewById(R.id.entry02);
            fieldForWidthOfBroder = (EditText)findViewById(R.id.fieldForBorder);
            okTableDialog.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        TableAction tablAc = new TableAction(visualPane);
                        tablAc.insertTable(fieldForRows.getText().toString(),fieldForColumns.getText().toString(), fieldForWidthOfBroder.getText().toString());
                    }
                });

            return dialog;
        case IDD_CUSTOM_INSERT_IMAGE:
            dialog.setTitle("Insert image");
            dialog.setContentView(R.layout.dialogimage);  

            final EditText fieldForURL = (EditText)findViewById(R.id.fieldForURL);
            Button on = (Button)findViewById(R.id.okImage);
            on.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        visualPane.getText().insert(visualPane.getSelectionEnd(),"<img src=\"" + fieldForURL.getText().toString() + "\">");  

                    }
                });

            return dialog;
        default:
            return alert.create();
    }
}

如果我在这两种情况下都注释掉“setOnClickListener”,程序将不会以错误结束

请帮忙,为什么会这样?

最佳答案

您正在搜索按钮而不是正确的对象。试试这个:

Button on = (Button)dialog.findViewById(R.id.okImage);

关于android - 无法在 Android 应用程序的对话框中设置 OnClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4647149/

相关文章:

Android禁用菜单点击声音

android - Android O 后台服务限制背后的逻辑

android - 如何改变android中actionbar部分的颜色

android - Compose 布局垂直对齐 : SpaceBetween having no impact

java - Android Java 中的 TreeSet 定制

android - Android系统使用BackupAgent时神秘的ClassNotFoundException

Android ListView 和 Adapter

android - Xamarin 在Webview中用相机上传图片

android - 如何自定义 ActionBar 上的后退按钮

android - 作为开发人员,最好的 Android 手机是什么?