用Kotlin从另一个Android活动中关闭当前活动

3

我正在尝试使用Kotlin从另一个(Android)活动中完成活动。 我知道使用Java完成它的方法是使用以下代码(https://dev59.com/4mkv5IYBdhLWcg3wvDXq#10379275

在第一个活动中:

BroadcastReceiver broadcast_reciever = new BroadcastReceiver() {

    @Override
    public void onReceive(Context arg0, Intent intent) {
        String action = intent.getAction();
        if (action.equals("finish_activity")) {
            finish();
            // DO WHATEVER YOU WANT.
        }
    }
};
registerReceiver(broadcast_reciever, new IntentFilter("finish_activity"));

另一项活动:
Intent intent = new Intent("finish_activity");
sendBroadcast(intent);

由于某些原因,将Java活动转换为Kotlin不会产生有效的输出。如果有人能给我正确的语法来正确地使用Kotlin,我将不胜感激。
Kotlin输出(第一个活动)[OK]:
val broadcast_reciever = object : BroadcastReceiver() {

    override fun onReceive(arg0: Context, intent: Intent) {
        val action = intent.action
        if (action == "finish_activity") {
            finish()
            // DO WHATEVER YOU WANT.
        }
    }
}
registerReceiver(broadcast_reciever, IntentFilter("finish_activity"))

kotlin输出(第二个活动)[OK]

            val intent = Intent("finish_activity")
            sendBroadcast(intent)

错误:http://i.imgur.com/qaQ2YHv.png

修复:所示代码是正确的,您只需要将其放置在onCreate函数内即可。


转换后会得到什么?这样更容易修复特定的错误。 - zsmb13
你能否也说一下这里有什么是无效的? - zsmb13
@zsmb13,我已经在IDE中链接了显示的错误。 - quiquelhappy
这段代码没有意义(我的意思是原始答案)...为什么?做一个简单的测试...启用“开发者选项->不保留活动”检查看它是否有效。 - Selvin
@Selvin并不完全正确,我使用这个是因为一开始我加载了一个登录界面,然后您选择登录方法。如果用户不小心没有选择他想要的登录方法,他可以随时返回并选择另一种方法(因为登录方法选择器仍然处于活动状态),但是如果他完成登录,两个活动将关闭。 - quiquelhappy
显示剩余11条评论
2个回答

5

从另一个活动结束特定活动的简单代码:

class SplashActivity : AppCompatActivity(), NavigationListner {

  class MyClass{
    companion object{
        var activity: Activity? = null
    }
  }

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    MyClass.activity = this@SplashActivity
  }


  override fun navigateFromScreen() {
    val intent = Intent(this,LoginActivity::class.java)
    startActivity(intent)
  }
}

现在从另一个活动中调用 SplashActivity.MyClass.activity?.finish() 以结束上述活动。

你不应该将活动保存到变量中,因为这可能会导致内存泄漏。 - Marco

1
错误提示 Expecting member declaration 出现是因为你在类的内部编写了语句(函数调用)。在该范围内,需要声明(函数、内部类)。
你必须将语句放置在函数内(然后从某个地方调用它们),以便执行它们。

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