You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AsyncTask执行完成后显示含TextView的PopupWindow?

问题分析与解决方案

你的问题很典型——AsyncTask是异步执行的,当你调用asyncTask.execute("xxxxx")后,代码会立刻继续执行showPopupWindow(widget),这时候processFinish方法还没被调用,meaning_result根本没拿到异步计算的结果,所以PopupWindow里的TextView自然显示不出正确内容。

正确的做法:把PopupWindow的显示逻辑移到AsyncTask的回调里

既然我们要等异步计算完成后再显示PopupWindow,那直接把showPopupWindow(widget)的调用放到processFinish方法里就可以了,这样就能保证只有当计算结果就绪时,才会弹出窗口并更新TextView的内容。

修改后的代码如下:

public void onClick(View widget) {
    MyAsyncTask asyncTask = new MyAsyncTask(new AsyncResponse() {
        @Override
        public void processFinish(Object output) {
            meaning_result = (String) output;
            // 计算完成后,再显示PopupWindow
            showPopupWindow(widget);
        }
    });
    asyncTask.execute("xxxxx");
}

额外注意事项

  • 确保showPopupWindow方法内部已经正确使用了更新后的meaning_result来设置TextView的文本;
  • 如果你的MyAsyncTask需要持有View的引用,要注意内存泄漏问题,可以考虑使用弱引用(WeakReference)来持有widget或者相关上下文;
  • 另外,从Android 11开始AsyncTask已经被标记为废弃,如果你是新项目,更推荐使用Coroutines或者ExecutorService来处理异步任务,但如果是维护旧代码,上面的修改完全可以解决你的问题。

内容的提问来源于stack exchange,提问作者user6456568

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:30:21