java - 带有onclicklistener的android中的警报对话框

标签 java android alert

应用程序停止启动并出现该日志 cat 错误,我多次检查我的代码但没有弄清楚是什么问题 我想这可能是我在布局上做错了,但没有错 提前致谢

我的 logcat 错误是:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.ahmed_samir.dialog, PID: 4229
              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ahmed_samir.dialog/com.example.ahmed_samir.dialog.MainActivity}: android.content.res.Resources$NotFoundException: File  from xml type layout resource ID #0x1020009
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                  at android.app.ActivityThread.access$800(ActivityThread.java:151)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:135)
                  at android.app.ActivityThread.main(ActivityThread.java:5254)
                  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)
               Caused by: android.content.res.Resources$NotFoundException: File  from xml type layout resource ID #0x1020009
                  at android.content.res.Resources.loadXmlResourceParser(Resources.java:2696)
                  at android.content.res.Resources.loadXmlResourceParser(Resources.java:2651)
                  at android.content.res.Resources.getLayout(Resources.java:1082)
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:412)
                  at com.android.internal.app.AlertController.setupView(AlertController.java:479)
                  at com.android.internal.app.AlertController.installContent(AlertController.java:236)
                  at android.app.AlertDialog.onCreate(AlertDialog.java:356)
                  at android.app.Dialog.dispatchOnCreate(Dialog.java:373)
                  at android.app.Dialog.show(Dialog.java:274)
                  at com.example.ahmed_samir.dialog.MainActivity.showDialog(MainActivity.java:65)
                  at com.example.ahmed_samir.dialog.MainActivity.onCreate(MainActivity.java:42)
                  at android.app.Activity.performCreate(Activity.java:5990)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                  at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:135) 
                  at android.app.ActivityThread.main(ActivityThread.java:5254) 
                  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) 
               Caused by: java.io.FileNotFoundException: 
                  at android.content.res.AssetManager.openXmlAssetNative(Native Method)
                  at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:485)
                  at android.content.res.Resources.loadXmlResourceParser(Resources.java:2678)
                  at android.content.res.Resources.loadXmlResourceParser(Resources.java:2651) 
                  at android.content.res.Resources.getLayout(Resources.java:1082) 
                  at android.view.LayoutInflater.inflate(LayoutInflater.java:412) 
                  at com.android.internal.app.AlertController.setupView(AlertController.java:479) 
                  at com.android.internal.app.AlertController.installContent(AlertController.java:236) 
                  at android.app.AlertDialog.onCreate(AlertDialog.java:356) 
                  at android.app.Dialog.dispatchOnCreate(Dialog.java:373) 
                  at android.app.Dialog.show(Dialog.java:274) 
                  at com.example.ahmed_samir.dialog.MainActivity.showDialog(MainActivity.java:65) 
                  at com.example.ahmed_samir.dialog.MainActivity.onCreate(MainActivity.java:42) 
                  at android.app.Activity.performCreate(Activity.java:5990) 
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                  at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:135) 
                  at android.app.ActivityThread.main(ActivityThread.java:5254) 
                  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) 

我更新的代码:

public class MainActivity extends Activity {
//mobily
private Button button;

private AlertDialog myDialog;

private TextView result;

private SharedPreferences prefs;
private String prefName = "report";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final EditText input = new EditText(this);
    button = (Button) findViewById(R.id.button1);
    result = (TextView) findViewById(R.id.tv);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showDialog();
        }
    });

    showDialog();
}

public void showDialog() {
    if (myDialog == null) {
        myDialog = new AlertDialog.Builder(this)
                .setTitle("ID Number")
                .setMessage("Please enter your ID")
                .setView(input)
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //your code
                    }
                })
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .create();
    }
    myDialog.show();
}

}

最佳答案

您收到该错误是因为您将 EditText 输入设置为不同的 Dialog,因为每次单击按钮都会创建一个新的 Dialog 因此错误。

您的代码第一次运行时,您的输入被设置为 dialog1 的 View ,但是当您第二次调用它时,您告诉 EditText 被设置为 dialog2 中的 View ,但是它已经有一个父对象是 dialog1。

改为设置 AlertDialog 的全局变量,然后仅当对话框尚不存在时才创建对话框。像这样:

private AlertDialog myDialog;

public void showDialog() {
        if (myDialog == null) {
            myDialog = new AlertDialog.Builder(this)
                    .setTitle("ID Number")
                    .setMessage("Please enter your ID")
                    .setView(input)
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            //your code
                        }
                    })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    })
                    .create();
        }
        myDialog.show();
    }

然后在您的 onClick 中调用 showDialog() 方法,而不是每次都重新创建对话框。

还要注意我是如何调用构建器中的每个方法的,这些命令是链接在一起的,这就是 Builder 可以轻松地一次调用多个方法,然后创建的要点。

关于java - 带有onclicklistener的android中的警报对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42162396/

相关文章:

php - Javascript 警报不在 php 联系表单中显示变音符号

ios - 显示带有文本字段输入的警报

java - 如何阅读邮件内容?

android - 从用于 onResume() 的 Intent 中获取参数

java - android java不显示任何布局

java - Android - 使用 Xml 布局自定义对话框

java - Google 数据存储获取功能

java - Java 的数组与数组 []

JavaFX 重复@FXML 标签解决方法

dialog - Android警报对话框按钮背景