1

私はインターネット全体を見てきました、そして私はこの主題についてstackOverflowのスレッドをよく知っています、しかしそれらのどれも私を助けませんでした。

私のアプリケーションでは、Standoutオープンソースライブラリを使用して非フルスクリーンウィンドウを有効にしています。基本的には、フレームレイアウトを作成し、それを次のように表示します。

WindowManager.addView(View view, LayoutParams params)

FrameLayout内には、ドロップダウンリストを表示するためのスピナービューがあります。アプリケーションを起動すると、FrameLayoutとスピナーがすべて正常に機能していることがわかりますが、スピナーに触れると、「ウィンドウを追加できません。トークンnullはアプリケーション用ではありません」というエラーでアプリケーションがクラッシュします。

getApplicationContext()を使用するコード行はありませんが、Standoutライブラリにはありましたが、「this」を指すように変更しましたが、それでもクラッシュします。

誰かが私を助けることができますか?

編集:それは2.3.5デバイスでのみ発生し(私がチェックしたものから)、4.1で正常に動作します

4

2 に答える 2

1

これは、スタンドアウト ウィンドウがアクティビティではないためです。単なる AlertWindow タイプです。スピナーをクリックすると、アクティビティから起動されたと想定するダイアログ ボックスが表示されます。そうではありません。その後、アプリのクラッシュが発生します。この問題を解決するには、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 に答える