Невозможно добавить диалог при нажатии моей собственной клавиши

При попытке открыть диалоговое окно я получаю следующее исключение для Android. когда я нажимаю свою собственную клавишу SoftKeyboard, как я могу решить эту проблему?

BadTokenException: Unable to add window -- token null is not for an application
com.example.android.softkeyboard.SoftKeyboard.diqalog(SoftKeyboard.java:759)
com.example.android.softkeyboard.SoftKeyboard.onKey(SoftKeyboard.java:526)
android.inputmethodservice.KeyboardView.onModifiedTouchEvent(KeyboardView.java:1252)

1 ответ

Прежде всего, вы не можете представить диалог из удаленного сервиса, вы можете сделать это только из запущенного Activity вот почему вы получаете BadTokenException, Но есть решения этой проблемы:

1) представить Activity с Theme.Dialog тема:

<activity
      android:name="com.srgtuszy.activity"
      android:theme="@android:style/Theme.Dialog"
      />

И начать задание как новую задачу:

Intent intent = new Intent(context, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Таким образом, вы получите действие, которое будет выглядеть как диалог.

2) Подарок пустой и прозрачный Activity и показать AlertDialog изнутри деятельности

Объявите и запустите действие в манифесте, как и раньше, но используйте прозрачную тему:

  <style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
  </style>

В упражнении переопределите onCreate() метод и вызов setContentView() и представить AlertDialog:

@Override
protected void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);
     Context context = this;
     AlertDialog.Builder dialog = new AlertDialog.Builder(context);
     dialog.setTitle("Hello!");
     dialog.show();
}

Это более хакерский подход, но таким образом вы можете показывать пользователю диалог без отклонения от метода ввода, который вы можете использовать для представления опций редактирования, например.

Если вы просто хотите уведомить пользователя об определенном событии, рассмотрите возможность использования Notifications, они не будут отвлекать пользователя и загрязнять пользовательский интерфейс.

Другие вопросы по тегам