【问题标题】:Error in adding a Spinner to an alertDialog将 Spinner 添加到 alertDialog 时出错
【发布时间】:2013-02-22 05:56:18
【问题描述】:

我正在使用 TabActivity 创建一个 android 应用程序,在我的 TabActivity 中,我有一个单击按钮,我想弹出一个警报对话框,我需要在警报对话框中添加一个微调器。

按钮点击代码如下

addMedicalRCD.setOnClickListener(new OnClickListener() 
{

    public void onClick(View arg0) 
    {
        View layout = inflater.inflate(R.layout.patient_add_medical_record, null);
        spinnerMedicalType=(Spinner)layout.findViewById(R.id.spinner_medicalRCD_type);
        addItemsT0SpinnerMedicalRCDType();

        alertAddMedicalRCD = new AlertDialog.Builder(getParent());
        alertAddMedicalRCD.setTitle("Add new medical record");
        alertAddMedicalRCD.setView(layout);


    }
});

这里是方法addItemsT0SpinnerMedicalRCDType()的主体;

private void addItemsT0SpinnerMedicalRCDType() 
{
    String[] s =new String[] {"Prescription","Email","Doctor    rounds","Phone","Other"};
    ArrayAdapter<String>adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, s);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerMedicalType.setAdapter(adapter);
}

在 onCreate 方法中我定义了context=this;

但是当我单击微调器时,它不显示选项。如何解决这个问题。请帮帮我

我的日志猫

 03-07 13:25:29.501: E/AndroidRuntime(1339): FATAL EXCEPTION: main
 03-07 13:25:29.501: E/AndroidRuntime(1339): android.view.WindowManager$BadTokenException:    Unable to add window -- token null is not for an application
 03-07 13:25:29.501: E/AndroidRuntime(1339):    at   android.view.ViewRoot.setView(ViewRoot.java:531)
 03-07 13:25:29.501: E/AndroidRuntime(1339):    at  android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
 03-07 13:25:29.501: E/AndroidRuntime(1339):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at android.app.Dialog.show(Dialog.java:241)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at android.widget.Spinner.performClick(Spinner.java:260)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at android.view.View$PerformClick.run(View.java:9080)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at android.os.Handler.handleCallback(Handler.java:587)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at android.os.Looper.loop(Looper.java:123)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at android.app.ActivityThread.main(ActivityThread.java:3683)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at java.lang.reflect.Method.invokeNative(Native Method)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at java.lang.reflect.Method.invoke(Method.java:507)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-07 13:25:29.501: E/AndroidRuntime(1339):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 设置adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  • 我添加了但同样的问题......

标签: android android-spinner android-alertdialog android-tabactivity android-context


【解决方案1】:

在你膨胀视图之后改变这个alertAddMedicalRCD.setView(layout);的位置

View layout = inflater.inflate(R.layout.patient_add_medical_record, null);

【讨论】:

  • 你的意思是下一个语句??
  • 尝试 getActivity() 代替 getParent()
  • 在你的活动内容上下文中声明一个全局变量上下文;并在 onCreate 中设置 context=this,现在使用这个上下文变量
  • oyee....然后是这个错误的原因,...我编辑问题并添加错误
【解决方案2】:

您可以在单击按钮时在 AlertDilog 的帮助下显示像 Spinner 这样的单选列表。

@Override
    public void onClick(View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(
                v.getContext());
        builder.setTitle(R.string.select_lanuage_txt);
        builder.setIcon(R.drawable.dialog_arrow);
        builder.setSingleChoiceItems(items, -1,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                        Toast.makeText(MainActivity.this, "Selected Index"+" "+which, Toast.LENGTH_LONG).show();
                    }
                }).setPositiveButton(
                getResources().getString(R.string.Cancel),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                            int whichButton) {
                        dialog.dismiss();
                    }
                });
        alert = builder.create();
        alert.show();

    }

有关完整的详细信息和源代码,请访问我的 Android 博客。

http://amitandroid.blogspot.in/2013/03/android-alert-dialog-with-single-choice.html

希望这篇博客能帮助您实现您的要求。

谢谢,

现在我在对话框中添加了一个 EditText。是你要找的吗?

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    相关资源
    最近更新 更多