我有一个带有R.id.eventDistance和R.id.eventTime的活动来显示距离&基于当前位置的旅行时间。我使用我的位置服务类每30秒计算一次这些值。
我的问题是:如何在Activity中更新TextView?我已经尝试查找问题并找到了一些可能的解决方案,例如使用BroadcastReceiver并在onReceive()方法中调用TextView.setText()。我不确定这是怎么做的。我应该像这样传递Activity类:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, HomeActivity.class);
}
}
我不确定在那之后该怎么做。任何帮助表示赞赏。
答案 0 :(得分:15)
请看这个流程。
1.在您想要更新UI时的LocationService类中。在你的情况下,它应该每30秒调用一次。
Intent i = new Intent("LOCATION_UPDATED");
i.putExtra("<Key>","text");
sendBroadcast(i);
2.在您的UI(HomeActivity)课程中
onCreate()中的
registerReceiver(uiUpdated, new IntentFilter("LOCATION_UPDATED"));
在班级
private BroadcastReceiver uiUpdated= new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
TextView.setText(intent.getExtras().getString("<KEY>"))
}
};
在onDestroy()
中unregisterReceiver(uiUpdated);
答案 1 :(得分:1)
您应该将Activity绑定到您的服务,以便他们可以直接通信并传递消息。
http://developer.android.com/guide/components/bound-services.html