从另一个Activity更新TextView

时间:2014-10-31 14:19:26

标签: java android

我在一个应用程序中有两个活动。

第一个每3秒更新一次TextView。它工作正常。

当键盘锁(锁定屏幕)被激活时,第一个活动将启动锁定屏幕上显示的第二个活动(即使屏幕被锁定也显示数据)。它也可以正常工作。

我希望第一个活动定期更新第二个活动的TextViews。我已经玩了几个小时,并尝试了很多我在谷歌找到的建议,但没有一个对我有用。在调用TextView.setText()时,第二个活动总是在NullPointerException崩溃。

这样做的最佳做法是什么?

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

我认为有一个很好的方法可以做到这一点,因为你的第一个活动可以被系统收集,而你通常不想在onPause被调用后做任何工作。

我会移动那个将视图更新为在后台运行的服务的逻辑。因为听起来你只需要在应用程序运行时使用这项服务,我就会创建一个绑定的服务。

http://developer.android.com/guide/components/services.html

答案 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/库。