如何在 Kotlin 中从另一个 class 调用 recreate?

How to call recreate from another class in Kotlin?

如何在 Kotlin 中从另一个 class 调用 recreate()?我习惯了 Java 并像下面显示的代码一样进行了一些 UI 更改。

public class MainActivity extends AppCompatActivity {

    private static MainActivity instance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        instance = this;
    }

    public static MainActivity getInstance() {
        return instance;
    }
}

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }

    private void onClick(View view) {
        MainActivity.getInstance().recreate();
    }
}

如果有人知道如何在 Kotlin 中实现这一点,那就太好了,我对此非常困惑。 最好的问候, 马库斯

Kotlin 的 1:1 端口类似于:

class MainActivity {
    protected fun onCreate() {
        instance = this
    }

    companion object {
        lateinit var instance : MainActivity
    }
}

class SecondActivity {
    private fun onClick() {
        MainActivity.instance.recreate()
    }
}

但这看起来确实是个坏主意。您应该使用一种可用的方式在活动之间进行通信,而不是像这样重新创建它。我想这不是你问的:-)

上面 的回答对于 1:1 端口是正确的,但实践是完全错误的。您在这里所做的实质上是创建对甚至不再向用户显示的 activity 的强引用。

然而你应该做的是类似下面的事情:-

内秒Activity

 val intent = Intent(BROADCAST_RECREATE_MAIN)
 LocalBroadcastManager.getInstance(this@ SecondActivity).sendBroadcast(intent)

主内Activity

private val localBroadcastReceiver by lazy {
  object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
      \Recreate main here
    }
  }
}

在 MainActivity 的 onCreate

val intentFilter = IntentFilter()
intentFilter.addAction(BROADCAST_RECREATE_MAIN)
LocalBroadcastManager.getInstance(context)
        .registerReceiver(localBroadcastReceiver, localBroadcastIntentFilter)

并在 onDestroy 内部

LocalBroadcastManager.getInstance(requireContext())
        .unregisterReceiver(localBroadcastReceiver)