如何在 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)
如何在 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()
}
}
但这看起来确实是个坏主意。您应该使用一种可用的方式在活动之间进行通信,而不是像这样重新创建它。我想这不是你问的:-)
上面
然而你应该做的是类似下面的事情:-
内秒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)