【问题标题】:Keep changes made by BroadcastReceiver保留 BroadcastReceiver 所做的更改
【发布时间】:2019-07-15 22:53:40
【问题描述】:

我被困在这一点上:

 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 所做的更改?

谢谢。

【问题讨论】:

    标签: java android android-activity textview broadcastreceiver


    【解决方案1】:

    一种方式:

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

    例子:

    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) 在 Activity 类中放置一个接收器

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-01-13
      • 2022-11-25
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多