【问题标题】:Cannot close Activity from AlertDialog called in PostExecute无法从 PostExecute 中调用的 AlertDialog 关闭 Activity
【发布时间】:2013-04-11 18:42:23
【问题描述】:

我有几个活动都将文件发送到互联网。

我想将发布过程放入一个单独的类文件中,以便为每个活动调用相同的过程。

我将调用活动的上下文传递给主 AsyncTask 方法,该方法依次调用 preExecute、doInbackground、Postexecute。

我有一个 AlertDialog,使用传递给 AsyncTask 的上下文构建,在显示服务器返回的消息的 postexecute 方法中,使用 OnClickListener 将其关闭。单击按钮时,alertdialog 将关闭,但底层活动屏幕并未关闭。

我尝试了几种不同的 finish() 组合,包括:-

dialog.cancel();
finish();

dialog.cancel();
MyActivity ma = new MyActivity();
ma.this.finish();

不过,没有什么会关闭 Activity。

我做错了什么,我需要做什么才能关闭它?

到目前为止,我可以让它工作的唯一方法是在两个活动中嵌入完全相同的代码,这在我看来既低效又容易出错。

非常欢迎任何帮助。

【问题讨论】:

    标签: android android-activity sdk android-asynctask android-alertdialog


    【解决方案1】:

    我将调用活动的上下文传递给主 AsyncTask

    您需要将 Activity 实例传递给扩展 AsyncTask 类的类,而不是仅传递 Activity 的上下文,因为完成方法来自 Activity 类而不是来自 Context 。所以尝试如下:

    public class Networkasynctask extends AsyncTask<...>{
    
    Activity activity;
    Context context;
    
    public Networkasynctask(Context context,Activity activity,...){
      this.activity=activity;
      .....
    }
    ....
    }
    

    并从 Activity 传递 Activity 实例:

    Networkasynctask networktaskobj=new Networkasynctask(this);
    

    现在使用Networkasynctask.this.activity.finish() 从非 Activity 类中关闭 Activity

    【讨论】:

    • 感谢您这么快回复。
    • 我尝试了您的建议,但没有任何区别(但我很可能误解了您的建议。networktaskobj 的意义是什么,因为我看不到它在任何地方都可以使用?
    • 好的,我现在可以开始工作了!我不完全确定我做了什么,但我认为这与用于主类文件中其他地方的上下文和活动的相同变量名有关。无论如何,非常感谢您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多