首页 > 解决方案 > 保留 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 所做的更改?

谢谢你。

标签: javaandroidandroid-activitytextviewbroadcastreceiver

解决方案


单程:

在您的活动中定义一个接口并在您的活动中实现该接口并将其引用传递给另一个类并在需要时调用该引用。

例子:

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);  

推荐阅读