Java 从其他活动更新TextView
我在一个应用程序中有两个活动 第一个每3秒更新一次文本视图。它很好用 当键盘防护装置(锁屏)被激活时,第一个活动启动出现在锁屏上的第二个活动(以便即使屏幕被锁定也显示数据)。它也很好用 我希望第一个活动定期更新第二个活动的文本视图。我已经玩了好几个小时,尝试了很多我在谷歌找到的建议,但是没有一个对我有用。在调用TextView.setText()时,第二个活动总是与NullPointerException一起崩溃 这样做的最佳实践是什么Java 从其他活动更新TextView,java,android,Java,Android,我在一个应用程序中有两个活动 第一个每3秒更新一次文本视图。它很好用 当键盘防护装置(锁屏)被激活时,第一个活动启动出现在锁屏上的第二个活动(以便即使屏幕被锁定也显示数据)。它也很好用 我希望第一个活动定期更新第二个活动的文本视图。我已经玩了好几个小时,尝试了很多我在谷歌找到的建议,但是没有一个对我有用。在调用TextView.setText()时,第二个活动总是与NullPointerException一起崩溃 这样做的最佳实践是什么 提前感谢您的帮助。您可以通过以下方式传递调用其他活动的数据
提前感谢您的帮助。您可以通过以下方式传递调用其他活动的数据:
Intent intent =new Intent(FirstActivity.this, SecondActivity.class);
intent.putStringExtra("TextName","Value");
startActivity(intent);
我不认为有什么好方法可以做到这一点,因为您的第一个活动可能会被系统收集,并且您通常不希望在调用onPause之后进行工作 我会将更新视图的逻辑移动到后台运行的服务中。由于听起来您只需要在应用程序运行时使用此服务,因此我将创建一个绑定服务
一种方法是定义一个保存要在TextView上显示的值的单例对象,例如整数或字符串 这两个活动都有权读取/写入此对象。因此,当您返回到第二个活动时,可能是在onResume()方法上。您可以执行以下操作:
public void onResume() {
super.onResume();
textview.setText(""+ MySingleton.getInstance().getValue());
}
关于另一项活动:
public void updateMethod() {
int newValue = .....;
MySingleton.getInstance().setValue(newValue);
}
这将确保无论何时返回此活动(调用onResume()),该值都将更新到TextView中。当然,假设您正在相应地更新来自其他活动的值
注意,这是你能做的最简单的解决方案,从专业角度来说,我会做一个事件驱动的解决方案,在这个解决方案中,当值发生变化时,观察者会得到通知。为此,您可以使用library。正如Ashish所说,您可以使用 将库添加到应用程序中,然后在第二个活动中,在EventBus in onCreate方法中注册活动:
EventBus.getDefault().register(this);
在项目中创建新类以定义事件类型:
public class TestEvent {
public TestEvent() {}
}
因此,在第二个活动中,创建一个方法来接收事件:
public void onEvent(TestEvent event) {
//stuff to do
}
现在,在第一个活动中,您只需在每2秒执行的方法中“激发”事件:
EventBus.getDefault().post(new TestEvent());
每次执行post方法时,第二个活动的OneEvent都将运行。他说,他想从第一个活动更新第二个activity textview,他可以通过传递值来执行,这两个活动不能同时可见,所以平均时间他可以传递值并更新文本视图,只是因为两个活动不能同时可见,这并不意味着第一个活动不在内存中。你只是在这里创建一个新的。或者你可以使用事件总线(绿色机器人),需要在第一个活动中注册事件,并在第二个活动中获取回拨以在那里更新。我们可以始终在第二个活动/第一个活动上创建和接口,以便在这两个活动之间进行通信。是的,我们始终可以使用服务解决此问题。