gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:43:38 25 4
gpt4 key购买 nike

应用程序停止启动并出现该日志 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com