我在一个应用程序中有两个活动。
第一个每3秒更新一次TextView。它工作正常。
当键盘锁(锁定屏幕)被激活时,第一个活动将启动锁定屏幕上显示的第二个活动(即使屏幕被锁定也显示数据)。它也可以正常工作。
我希望第一个活动定期更新第二个活动的TextViews。我已经玩了几个小时,并尝试了很多我在谷歌找到的建议,但没有一个对我有用。在调用TextView.setText()时,第二个活动总是在NullPointerException崩溃。
这样做的最佳做法是什么?
提前感谢您的帮助。
答案 0 :(得分:1)
我认为有一个很好的方法可以做到这一点,因为你的第一个活动可以被系统收集,而你通常不想在onPause被调用后做任何工作。
我会移动那个将视图更新为在后台运行的服务的逻辑。因为听起来你只需要在应用程序运行时使用这项服务,我就会创建一个绑定的服务。
答案 1 :(得分:0)
您可以将调用其他活动的数据传递为:
Intent intent =new Intent(FirstActivity.this, SecondActivity.class);
intent.putStringExtra("TextName","Value");
startActivity(intent);
答案 2 :(得分:0)
Ashish说你可以使用EventBus。
将库添加到您的应用程序,并在第二个活动中使用onCreate方法在EventBus中注册您的活动:
EventBus.getDefault().register(this);
在项目中创建一个新类来定义事件类型:
public class TestEvent {
public TestEvent() {}
}
因此,在您的第二个活动中,创建一个接收事件的方法:
public void onEvent(TestEvent event) {
//stuff to do
}
现在,在你的第一次活动中,你只需要开始"开火"方法中的事件每2秒执行一次:
EventBus.getDefault().post(new TestEvent());
每次执行post方法时,都会运行第二个活动的onEvent。
答案 3 :(得分:-1)
一种方法是定义一个Singleton对象,该对象保存要在TextView上显示的值,例如,Integer或String。
这两个活动都可以读取/写入此对象。所以当你回到第二个活动时,可能在onResume()方法上......你可以做到以下几点:
public void onResume() {
super.onResume();
textview.setText(""+ MySingleton.getInstance().getValue());
}
关于其他活动:
public void updateMethod() {
int newValue = .....;
MySingleton.getInstance().setValue(newValue);
}
这将确保无论何时返回此活动(如调用onResume()),该值都将更新到TextView中。当然,假设您正在相应地更新其他活动的值。
请注意,这是您可以做的最简单的解决方案,从专业角度来说,我会执行事件驱动的解决方案,其中观察者会在更改值时收到通知。为此,您可以使用http://square.github.io/otto/库。