gpt4 book ai didi

android - 调用 popupwindow 的 showAtLocation 会使应用程序崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:56 25 4
gpt4 key购买 nike

我有一个从 View 扩展的类,我正在尝试使用这段代码显示一个 popupWindow

public class dbView extends View implements View.OnTouchListener {

private void showDialog(String msg) {
LayoutInflater layoutInflater;
View dialogContent;
final PopupWindow popupWindow;

layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
dialogContent = layoutInflater.inflate(R.layout.pop_up_dialog, null);

popupWindow = new PopupWindow(
dialogContent,
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);

popupWindow.showAtLocation(this, Gravity.CENTER, 10, 10);

}

}

我的应用程序在尝试执行最后一行时崩溃了。异常的消息是

Can't create handler inside thread that has not called Looper.prepare()

我已经寻找与该消息相关的答案,所有答案都涉及弹出窗口是在单独的线程上创建的,我应该使用runOnUIThread 但如果我在 VIEW 中,我需要这样做吗?这个问题的原因可能是什么?

最佳答案

这取决于您在哪里调用 showDialog(String msg),我知道您是从 View 类调用它,但这并不意味着它在 UI 线程上,View 调用是在UI 线程,但是如果您在线程中进行 View 调用,则会出现该错误。我知道相同的代码会自行解决,但是如果您在 View 类中运行 TimerTask 或 Threads,您应该仔细检查它们。您还可以在 View 类中调用 post(runnable);(相同的机制 Handler),而不是 runOnUithread,这将确保runnable 调用将被发送到主线程。

简而言之,检查您在 View 类中调用它的位置

关于android - 调用 popupwindow 的 showAtLocation 会使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30424631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com