2012-02-24 49 views
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

粘貼您的代碼 – 2012-02-24 12:35:05

+0

final CharSequence [] items = {「Red」,「Green」,「Blue」}; mCurKeyboard = simleyKey; mInputView.setKeyboard(mCurKeyboard); mInputView.closing(); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(「Pick a color」); builder.setItems(項目,新DialogInterface.OnClickListener(){ 公共無效的onClick(DialogInterface對話框,INT項){ Toast.makeText(getApplicationContext(),項[項目],Toast.LENGTH_SHORT).show(); })。show();}}。 – 2012-02-24 13:30:10

+0

給你的問題格式化的代碼,你使用TAb BAr? – 2012-02-24 13:31:15

回答

1

首先,你不能從一個遠程服務顯示一個對話框,你只能從運行Activity內這樣做,這就是爲什麼你得到一個BadTokenException。但也有解決問題的對策:

1)提出了一個ActivityTheme.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

hei,很好的答案,有沒有辦法可以將結果返回給InpuntMethodService? – Apperside 2013-06-09 13:53:55

相關問題