1

我浏览了整个互联网,并且我很清楚 stackOverflow 中关于这个主题的线程,但没有一个对我有帮助。

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

WindowManager.addView(View view, LayoutParams params)

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

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

谁能帮我?

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

4

2 回答 2

1

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

  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;
    }
  }
于 2012-09-27T19:52:52.533 回答
1

我有同样的问题。解决方案相当简单。您只需要在布局 XML 文件中添加:

android:spinnerMode="dropdown"

所以你的微调器元素看起来像这样:

<Spinner
        android:id="@+id/spLists"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:spinnerMode="dropdown" />
于 2014-01-21T17:09:14.317 回答