当按下我自己的软键盘键时无法添加对话框

问题描述:

当我尝试打开对话框时,出现以下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

首先,你不能从一个远程服务显示一个对话框,你只能从运行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