2017-10-09 20 views
3

ボタンのリストを表示するPopupWindowを作成しました。もともと、私のリストの各項目のために、私は、ビューホルダーにToastメッセージを表示するようにOnLongClickListenerを実装:BadTokenExceptionを引き起こすTooltipCompat

private inner class MenuItemViewHolder (itemView: View) { 

    val button: ImageButton = itemView.findViewById(R.id.button); 

    fun bindItem(item: MenuItem) { 
     button.setImageDrawable(item.icon) 
     button.isEnabled = item.isEnabled 

     button.setOnClickListener { popupWindow.onItemClick(item) } 
     button.setOnLongClickListener { 
      Toast.makeText(context, item.title, Toast.LENGTH_SHORT).show() 
     } 
    } 

} 

私の代わりにtooltipメッセージを表示するには、これを更新したい:

TooltipCompat.setTooltipText(button, item.title) 

しかし、私はsimilarにいくつかの答えを見つけた

10-06 16:32:35.470 22492-22492/com.example.app.ui E/AndroidRuntime: FATAL EXCEPTION: main 
     Process: com.example.app.ui, PID: 22492 
     android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
      at android.view.ViewRootImpl.setView(ViewRootImpl.java:765) 
      at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356) 
      at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:92) 
      at com.android.internal.view.TooltipPopup.show(TooltipPopup.java:74) 
      at android.view.View.showTooltip(View.java:26365) 
      at android.view.View.showLongClickTooltip(View.java:26389) 
      at android.view.View.performLongClickInternal(View.java:6344) 
      at android.view.View.performLongClick(View.java:6294) 
      at android.view.View.performLongClick(View.java:6312) 
      at android.view.View$CheckForLongPress.run(View.java:24662) 
      at android.os.Handler.handleCallback(Handler.java:789) 
      at android.os.Handler.dispatchMessage(Handler.java:98) 
      at android.os.Looper.loop(Looper.java:164) 
      at android.app.ActivityThread.main(ActivityThread.java:6541) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

:私は長いボタンをクリックしたときに、私は次のエラーを取得しますは、ActivityViewに属していることが、新しいWindowを追加しようとすると正しい状態にないことを示唆しているようです。しかし、ボタンを長押しする前にActivityが確実に実行されており、破壊的なライフサイクルメソッドが呼び出されていません(つまり、、onStoponDestroy)。

このエラーの原因は何ですか? ListViewPopupWindowに表示されているということと関連がありますか?もしそうなら、私はどのように状況を改善することができますか?


GitHub projectに必要なコードを追加しました。アプリケーションを実行すると、メニューボタン(オーバーフローボタン)上でツールチップが正常に動作することがわかります。しかし、メニューを開いてアイコンを長押しすると、アプリケーションが上記のエラーでクラッシュします。

+0

githubに簡単なプロジェクトを投稿できますか? – azizbekian

+0

@azizbekianリンクが更新されました。 – Bryan

+1

[バグレポート](https://issuetracker.google.com/issues/64461213)を見たことがありますか?これはあなたの問題のようですが、変更がリリースされたかどうかは不明です。私の推測では、ツールチップのポップアップが間違ったウィンドウに添付されているということです。 – Cheticamp

答えて

1

あなたはこれを見ましたか?bug report?これはあなたの問題のようですが、変更がリリースされたかどうかは不明です。私の推測では、ツールチップのポップアップが間違ったウィンドウに添付されているということです。

関連する問題