点击ListView项时在Android上打开自定义对话框?

18 浏览
0 Comments

点击ListView项时在Android上打开自定义对话框?

我试图打开一个自定义对话框,覆盖设备的整个界面。但是我不知道为什么会抛出异常。请检查我的代码,并帮助我解决这个问题。\n点击ListView项时:\ndata.setOnItemClickListener(new OnItemClickListener() {\n @Override\n public void onItemClick(AdapterView parent, View view, int position, long id) {\n passengerInformationPopup();\n }\n});\n打开对话框的函数:\npublic void passengerInformationPopup() {\n final Dialog dialog = new Dialog(getBaseContext());\n dialog.setContentView(R.layout.passenger_details_dialog); \n String[] tittlearray = {\"先生\", \"女士\", \"小姐\"};\n Spinner tittleSpinner = (Spinner) dialog.findViewById(R.id.Tittle);\n ArrayAdapter dataAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, tittlearray); \n dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);\n tittleSpinner.setAdapter(dataAdapter);\n dialog.show();\n}\n异常:\n08-14 16:39:50.338: E/AndroidRuntime(30294): FATAL EXCEPTION: main\n08-14 16:39:50.338: E/AndroidRuntime(30294): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.view.ViewRootImpl.setView(ViewRootImpl.java:656)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:328)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:226)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:151)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.app.Dialog.show(Dialog.java:277)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at com.example.userdetails.MainActivity.passengerInformationPopup(MainActivity.java:181)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at com.example.userdetails.MainActivity$5.onItemClick(MainActivity.java:149)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.widget.AdapterView.performItemClick(AdapterView.java:298)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.widget.AbsListView.performItemClick(AbsListView.java:1114)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2937)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.widget.AbsListView$1.run(AbsListView.java:3695)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.os.Handler.handleCallback(Handler.java:615)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.os.Handler.dispatchMessage(Handler.java:92)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.os.Looper.loop(Looper.java:153)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at android.app.ActivityThread.main(ActivityThread.java:4987)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at java.lang.reflect.Method.invokeNative(Native Method)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at java.lang.reflect.Method.invoke(Method.java:511)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)\n08-14 16:39:50.338: E/AndroidRuntime(30294): at dalvik.system.NativeStart.main(Native Method)

0
0 Comments

在Android中,当点击ListView的一个项目时,希望能够打开一个自定义对话框。然而,有一个问题导致了这个功能无法正常工作。问题出现的原因是在创建对话框时使用了错误的上下文。解决这个问题的方法是使用正确的上下文来创建对话框。

以下是解决这个问题的正确方法:

final Dialog dialog= new Dialog(YOUR_ACTIVITY.this);

在这个方法中,我们使用了正确的上下文`YOUR_ACTIVITY.this`来创建对话框。这样就能够在点击ListView项目时成功打开一个自定义对话框。

希望这个简短的文章能够帮助你解决这个问题。

0
0 Comments

问题原因:

问题出现的原因是在点击ListView项时,打开自定义对话框时使用了错误的上下文参数。

解决方法:

解决方法是使用正确的上下文参数来打开自定义对话框。使用getApplicationcontext()或YOUR_ACTIVITY.this来替代getBaseContext()。

以下是示例代码:

final Dialog dialog = new Dialog(getApplicationcontext()); // 或者 final Dialog dialog = new Dialog(YOUR_ACTIVITY.this);

通过使用正确的上下文参数,问题就可以得到解决。

0
0 Comments

问题:如何在ListView的项被点击时打开一个自定义对话框(Open a Custom Dialog on Click of a ListView Item Android?)?

原因:需要使用Activity的上下文来创建对话框。

解决方法:在代码中使用Activity的上下文来创建对话框,并为对话框的构造函数指定一个非对话框主题,例如android.R.style.Theme或android.R.style.Theme_Light。在styles.xml文件中定义相应的样式,并将其设置为对话框的样式。

具体步骤如下:

1. 使用Activity上下文创建一个对话框:

final Dialog dialog = new Dialog(ActivityName.this);

2. 为对话框构造函数指定一个非对话框主题:

Dialog dialog = new Dialog(ActivityName.this, android.R.style.Theme);

3. 在styles.xml文件中定义对话框的样式,可以参考以下链接中的主题样式:

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml

4. 将定义好的样式设置为对话框的样式。

需要注意的是,如果在使用主题样式时遇到错误信息"Theme_Dark_NoTitleBar_FullScreen cannot be resolved or is not a field",可以参考以下链接中的解决方法:

https://groups.google.com/forum/#!topic/android-developers/NDFo9pF8sHY

在Android开发中,当需要在ListView的项被点击时打开一个自定义对话框时,需要使用Activity的上下文来创建对话框,并为对话框的构造函数指定一个非对话框主题样式。同时需要在styles.xml文件中定义相应的样式,并将其设置为对话框的样式。如果遇到错误信息,可以参考以上链接中的解决方法。

0