【问题标题】:finish() not finishing the activity: Androidfinish() 没有完成活动:Android
【发布时间】:2014-03-13 19:41:53
【问题描述】:

我有一个 Activity,我在其 onCreate() 方法中调用了一个实用程序函数。 此实用程序函数需要一个回调类实例作为参数,它在其中返回我需要的信息。这是:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
         Utility.functionA(new functionACallBack() {
                /**
                 * 
                 */
                private static final long serialVersionUID = -7896922737679366614L;

                @Override
                public void onResponse(String error) {

                     ((MyActivity) AppClass.getAppContext()).finish();
                }
            });
}

获得该信息后,我想关闭该活动。所以我从我为回调创建的匿名类内部调用了finish()。

但是活动还没有结束。我想也许我需要从UI线程调用finish()所以我做了runOnUiThread(),在里面我也尝试调用finish()。但它只是不起作用。

有人可以帮我解决这个问题吗?

更新:

我正在存储 APP 上下文,然后尝试使用它但无济于事。

public class AppClass extends Application {

    private static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        AppClass.mContext = getApplicationContext();

    }

    public static Context getAppContext(){
        return AppClass.mContext;
    }
}

【问题讨论】:

  • 你试过打电话给YourActivity.finish()吗?
  • 我试过了,但是 Utility.functionA() 是一个静态函数,它不允许我从里面调用非静态函数..
  • 然后尝试在您的Activity 中声明一个static 函数,该函数将调用YourActivity.finish() 并在您的onResponse() 方法中调用该函数。
  • 是的,您需要直接从您的活动中调用完成,现在它正在从您的实用程序函数中调用。
  • 我该怎么做...@zgc7009?

标签: android callback android-activity activity-finish


【解决方案1】:

只需这样调用:

@Override
public void onResponse(String error) {
  ((Activity) context).finish();
}

由于这是一个static 函数,您必须能够以static 的方式访问您的Context。您可以将其保存为 Class 变量,但您必须注意它的处理方式,因为它可能会导致内存泄漏。

为避免它们,您可以声明一个 extends Application 的类并在此处保存您的上下文,这样您就不会发生内存泄漏。

【讨论】:

  • 你不能像这样以static 的方式调用finish()
  • 没有什么叫做 MyActivity.finish()
  • 你是对的,我更改了代码,因为他必须使用context 来做到这一点。
  • 但是我可以直接调用 ((Activity) context).finish();来自内部的回应?那不行吗?
  • 好的,我试过了,我选择了单独的类来存储应用程序上下文。然后当我在这里使用它时,我得到一个类转换异常
【解决方案2】:

尝试使用此代码:

((Activity) ActivityClass.this).finish();

记住,使用 Activity 类,而不是 Application 类。

【讨论】:

  • 您是从活动类还是应用程序类中调用它?
  • 我是从最初问题中提到的 onResponse 函数内部调用它
  • 这里的演员阵容相当多余
猜你喜欢
  • 2012-12-15
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 2011-06-13
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多