ボタンのリストを表示する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)
:私は長いボタンをクリックしたときに、私は次のエラーを取得しますは、Activity
がView
に属していることが、新しいWindow
を追加しようとすると正しい状態にないことを示唆しているようです。しかし、ボタンを長押しする前にActivity
が確実に実行されており、破壊的なライフサイクルメソッドが呼び出されていません(つまり、、onStop
、onDestroy
)。
このエラーの原因は何ですか? ListView
がPopupWindow
に表示されているということと関連がありますか?もしそうなら、私はどのように状況を改善することができますか?
GitHub projectに必要なコードを追加しました。アプリケーションを実行すると、メニューボタン(オーバーフローボタン)上でツールチップが正常に動作することがわかります。しかし、メニューを開いてアイコンを長押しすると、アプリケーションが上記のエラーでクラッシュします。
githubに簡単なプロジェクトを投稿できますか? – azizbekian
@azizbekianリンクが更新されました。 – Bryan
[バグレポート](https://issuetracker.google.com/issues/64461213)を見たことがありますか?これはあなたの問題のようですが、変更がリリースされたかどうかは不明です。私の推測では、ツールチップのポップアップが間違ったウィンドウに添付されているということです。 – Cheticamp