【发布时间】:2018-12-19 18:19:31
【问题描述】:
我有麻烦了。
我想从 LifeCycleManager(它是 LifecycleObserver)调用 MainActivity 的方法并执行简单的 XML 修改。但是那次崩溃是因为我试图访问一个 XML 值并且 main_activity.xml 还没有完全创建
首先这是我的 LifeCycleManager:
class LifeCycleManager(context: Context) : LifecycleObserver {
companion object {
var notif = NotificationManager()
var onForeground = false
var main = MainActivity()
// If we are on MainActivity return true , otherwise return false
fun isOnHomeController(context: Context?): Boolean {
if (context == null || context !is MainActivity)
return false
return true
}
var mContext = context
// WHEN THE APP BECOME ACTIVE
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun appComeBackFromBackground() {
onForeground = true
notif.cancelAllLocalNotifications(mContext)
if (isOnHomeController(mContext)) {
// Call the refresh dialog and print it
main.appComeBackFromBackground("refresh", null)
}
}
}
这是我的 MainActivity 方法:
fun appComeBackFromBackground(status: String?, elementsadded: Int?)
{
Log.e("enterForeground", "App come back in Foreground")
if (status == null) return
when (status)
{
"refresh" ->{
val text = findViewById<TextView>(R.id.refreshtext)
text.setText("test")
}
else -> {
return
}
}
}
正如您所见,当我的 MainActivity Start 时,我的 Lifecycle 获取事件并直接进入我的 appComeBackFromBackground() 方法。 在其中我调用我的 MainActivity 方法,我想从 activity_main.xml 修改一个元素
论文崩溃:
java.lang.RuntimeException:无法启动活动 ComponentInfo{com.mControllers.MainActivity}:java.lang.RuntimeException:调用观察者方法失败
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()'
请问我该怎么办?我真的需要这样做( LifecycleObserver 到 MainActivity )。谢谢
编辑:
我尝试像这样延迟调用 MainActivity 的方法:
Handler().postDelayed({
main.appComeBackFromBackground("refresh", null)
}, 5000)
即使加载了 MainActivity 布局,它也会崩溃
【问题讨论】:
-
您正在尝试设置尚未创建的视图的文本。在生命周期方法中保存您想要在共享首选项中设置的值,然后在活动中更新视图。
-
@MRah 正是视图尚未创建。问题是我不想保存任何特定数据,我只想在我的 LifecycleObserver 告诉我我在前台时执行一些 XML 更改
-
要永久修改xml布局吗?你能更详细地解释一下你的情况吗?对我来说,你想控制你的应用是来自后台还是从头开始创建的,对吗?不过,在这里完全修改布局没有任何意义!
-
@MRah 对不起,如果不够清楚,它有点复杂。我想访问 xml 布局。例如:我的 XML 中有一个元素对“不可见”具有可见性,我希望在 MainActivity 的方法中找到该元素并将其设置为“可见”,以便在我的屏幕上显示它m 在我的 MainActivity
-
@MRah okey 我会像你说的那样做,我会优先保存值“刷新”,例如当布局完全加载时在我的 MainActivity 中解释它
标签: java android xml android-layout kotlin