Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从其他活动更新TextView_Java_Android - Fatal编程技术网

Java 从其他活动更新TextView

Java 从其他活动更新TextView,java,android,Java,Android,我在一个应用程序中有两个活动 第一个每3秒更新一次文本视图。它很好用 当键盘防护装置(锁屏)被激活时,第一个活动启动出现在锁屏上的第二个活动(以便即使屏幕被锁定也显示数据)。它也很好用 我希望第一个活动定期更新第二个活动的文本视图。我已经玩了好几个小时,尝试了很多我在谷歌找到的建议,但是没有一个对我有用。在调用TextView.setText()时,第二个活动总是与NullPointerException一起崩溃 这样做的最佳实践是什么 提前感谢您的帮助。您可以通过以下方式传递调用其他活动的数据

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

第一个每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,他可以通过传递值来执行,这两个活动不能同时可见,所以平均时间他可以传递值并更新文本视图,只是因为两个活动不能同时可见,这并不意味着第一个活动不在内存中。你只是在这里创建一个新的。或者你可以使用事件总线(绿色机器人),需要在第一个活动中注册事件,并在第二个活动中获取回拨以在那里更新。我们可以始终在第二个活动/第一个活动上创建和接口,以便在这两个活动之间进行通信。是的,我们始终可以使用服务解决此问题。