android - StandOutWindow Spinner 无法添加窗口 -- 标记为空

标签 android android-layout android-widget android-spinner

我在整个互联网上都看过了,我很清楚 stackOverflow 中关于这个主题的线程,但没有一个对我有帮助。

在我的应用程序中,我使用 Standout 开源库来启用非全屏窗口,基本上它所做的是创建框架布局并用

WindowManager.addView(View view, LayoutParams params)

在 FrameLayout 中,我有 Spinner View 来显示下拉列表。 当我启动应用程序时一切正常,我可以看到 FrameLayout 和微调器, 但是当我触摸微调器时,应用程序崩溃并出现错误:“无法添加窗口—— token null 不适用于应用程序”

我没有使用 getApplicationContext() 的任何代码行,尽管 Standout 库有,但我将它们更改为指向“this”但它仍然崩溃。

谁能帮帮我?

编辑:它只发生在 2.3.5 设备上(据我检查),在 4.1 上工作正常

最佳答案

这是因为 Standout 窗口不是 Activity 。它只是一个 AlertWindow 类型。单击 Spinner 将尝试显示一个对话框,该对话框假定从 Activity 启动。但事实并非如此。然后应用程序崩溃发生。要解决此问题,您必须扩展微调器以显示 ListView 对话框,就像用户单击微调器时显示的微调器一样。 试试下面的代码来显示非 Activity 类的对话框:

  public class MySpinner extends Spinner {
    @Override
    public boolean performClick() {

      // the spinner click is handled here
        selectedPosition = getSelectedItemPosition();
        Dialog dialog = getDialog();
        Window window = dialog.getWindow();
        window.getAttributes().type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
        dialog.show();
      }
      return true;
    }

  private Dialog getDialog() {
       AlertDialog.Builder builder = new AlertDialog.Builder(getContext());

       View dialogView = inflate(getContext(),R.layout.spin_dialog, null);
       builder.setView(dialogView);

       // show the Spinner array list in a listview
       ListView listview = (ListView) dialog.findViewById(R.id.spin_list);
       listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
       listview.setOnItemClickListener(this);
       ArrayAdapter adapter = new ArrayAdapter(getContext(), R.layout.list_item, spinner_array_list);

      // here is your spin adapter
      listview.setAdapter(adapter);

      builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
         @Override
         public void onCancel(DialogInterface dialog) {
              dialog.dismiss();
         }
      });
      AlertDialog dialog = catBuilder.create();
      return dialog;
    }
  }

关于android - StandOutWindow Spinner 无法添加窗口 -- 标记为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12620784/

相关文章:

android - 为什么我的自定义主题不影响我的自定义列表项布局的 TextView ?

android - 如何设置自定义 ListView 项目的高度...?

android - 偏好项上的重复联系人

android - 删除微调器中的填充

android - 媒体记录器 IOException : prepare failed

java - 框架布局 : How to add other Views on top of GLSurfaceView?

android - 将字段动态添加到 Android 中的布局

javascript - 在 HTML 表单的 HTML DOM 脚本中获取错误 "Unexpected Token"

android - Google Maps v3 MapView 未在 Android 中获取所有父 View

android - 如何更改 android 中微调器的下拉选择器颜色?