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

1

При попытке открыть диалог я получаю следующее исключение для 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)
  • 0
    вставьте свой код
  • 0
    final CharSequence [] items = {"Red", "Green", "Blue"}; mCurKeyboard = simleyKey; mInputView.setKeyboard (mCurKeyboard); mInputView.closing (); AlertDialog.Builder builder = новый AlertDialog.Builder (это); builder.setTitle («Выберите цвет»); builder.setItems (items, new DialogInterface.OnClickListener () {public void onClick (диалог DialogInterface, int item) {Toast.makeText (getApplicationContext (), items [item], Toast.LENGTH_SHORT) .show ();}}). шоу();
Показать ещё 1 комментарий
Теги:

1 ответ

1

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

1) Представить Activity с Theme.Dialog Тема 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, они не будут отвлекать пользователя и загрязнять пользовательский интерфейс.

  • 0
    Привет, хороший ответ, есть ли способ вернуть результат в InpuntMethodService?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню