java - 保留 BroadcastReceiver 所做的更改
问题描述
我被困在这一点上:
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
String number = bundle.getString("Time");
GameTime.setText("" +number + " hours");
}
};
在另一个 Activity 中,当按下 Button 时,MainActivity 得到一个 int。每当我打开 Activity 时,我都看不到带有number
变量的 GameTime TextView。
我知道 OnReceive 方法有效,因为我在其中放了一个 toast,并且在从另一个 Activity 发送 int 后我可以看到 toast。如何在更改活动时保留对 TextView 所做的更改?
谢谢你。
解决方案
单程:
在您的活动中定义一个接口并在您的活动中实现该接口并将其引用传递给另一个类并在需要时调用该引用。
例子:
a) 创建接口
public interface MyBroadcastListener{
public void doSomething(String result);
}
b) 初始化广播接收器
public class TestNotifAlarm extends BroadcastReceiver {
private MyBroadcastListener listener;
@Override
public void onReceive(Context context, Intent intent) {
listener = (MyBroadcastListener)context;
listener.doSomething("Some Result");
}
}
c) 在Activity中实现接口
public YourActivity extends AppCompatActivity implements MyBroadcastListener{
// Your Activity code
public void updateTheTextView(String t) {
TextView textView = (TextView) findViewById(R.id.textView);
textView.setText(t);
}
@Override
public void doSomething(String result){
updateTheTextView(result); // Calling method from Interface
}
}
另一种方式 :
a)在您的活动类中放置一个接收器
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
textView.setText(intent.getStringExtra("extra"));
}
};
b) 注册广播接收器
registerReceiver(broadcastReceiver , new IntentFilter("trigger_broadcust"));
c) 调用 sendBroadcast
Intent intent = new Intent("trigger_broadcust");
intent.putStringExtra("extra", "data");
sendBroadcast(intent);
推荐阅读
- c# - Blazor 将 NavItem 的列表作为参数传递给 NavMenu
- shell - 递归查找具有特定扩展名的文件数的脚本
- javascript - 为什么此功能在单击时仅运行一次但之后停止工作
- amazon-web-services - Sam 包执行失败
- javascript - Vue3 在其余内容之上显示组件
- sql - Case 语句非法表达式 SQL
- groovy - groovy jsonbuilder 删除 json 节点
- azure - Azure Front Door 不重定向以指定应用功能
- java - 如何使用 JPA 和 Hibernate 调用 Oracle 存储过程和函数
- jquery - 再次单击相同按钮时更改文本按钮的功能会变回