从另一个类关闭一个活动界面

11

我在创建谷歌地图应用程序时遇到了一个安卓问题。

我有一个如下所示的活动:

public class MapCallActivity extends MapActivity {
    classA class = new classA(this);
    classA.callMethod();
}

下面定义了classA类:

 public class classA{
   public classA(Context context){
   this.myContext = context;
 }

   void callMethod(){
      if (isFileValid) {
        <do_something...>;
      } else {
        <call_the_activity's finish() method>;
      }
   }
 }   
有没有一种方式可以执行<call_the_activity's finish() method>使得MapCallActivity关闭?
非常感谢任何帮助!
4个回答

42
public class classA{
    public classA(Context context){
        this.myContext = context;
    }

    void callMethod(){
        if(isFileValid){

        }else{
            ((Activity)myContext).finish();
        }
    }
}

有没有一种直接将任何对象关闭的方法? - curlyreggie
如果其他类引用了这个Activity,那么它可以。但是其他的Activity或Service则不行。 - Changwei Yao
谢谢你的帮助。我已经重新构思了问题,使它更加清晰明了。你的代码还能在这种情况下正常工作吗? - curlyreggie
不过我不确定为什么你想这样做...系统本应该为你处理这个问题。你还应该检查myContext是否为空,以防Activity已经被销毁。 - Alex Lockwood
这一行代码 -> ((Activity)myContext).finish(); 是我一直在寻找的。谢谢。 - Kenny Dabiri

2
这是如何在Kotlin代码的另一个类中调用Activity的finish方法。 它完美地运行。
class DialogHelper(applicationContext: Context) {
   
 private var context = applicationContext

    fun showDialog() {
        var dialog: Dialog? = null
        val builder = Dialog.Builder(context)
            .content(R.string.your_string)
            .positiveButton(R.string.str_ok, listener = {
                (context as Activity).finish()
                dialog?.hide()
            })
        dialog = builder.create()
        dialog.setCanceledOnTouchOutside(false)
        dialog.show()
    }
}

1
使用 Kotlin 代码,重要的部分是:(context as MyActivity).finish() - Ola Ström

1
我通常的做法是在我的活动中使用接收器,然后从B类触发广播。A类接收广播并处理其onReceive工作。例如finish();

5
请添加一个例子以便更好地理解。谢谢。 - Emtiaz Zahid

0
这可能会帮到你...
在你想结束当前活动的地方添加这行代码 Java

((Activity)getContext()).finish();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接