保留 BroadcastReceiver 所做的更改
Keep changes made by 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。
如何在更改 Activity 时保留对 TextView 所做的更改?
谢谢。
一种方式:
在您的 activity 中定义一个接口并在您的 activity 中实现该接口并将其引用传递给另一个 class 并在需要时调用该引用。
示例:
a) 创建接口
public interface MyBroadcastListener{
public void doSomething(String result);
}
b) 初始化 BroadCastReceiver
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 class
中放置一个接收器
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
textView.setText(intent.getStringExtra("extra"));
}
};
b) 注册 BroadCastReceiver
registerReceiver(broadcastReceiver , new IntentFilter("trigger_broadcust"));
c) 调用 sendBroadcast
Intent intent = new Intent("trigger_broadcust");
intent.putStringExtra("extra", "data");
sendBroadcast(intent);
我卡在了这里:
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。 如何在更改 Activity 时保留对 TextView 所做的更改?
谢谢。
一种方式:
在您的 activity 中定义一个接口并在您的 activity 中实现该接口并将其引用传递给另一个 class 并在需要时调用该引用。
示例:
a) 创建接口
public interface MyBroadcastListener{
public void doSomething(String result);
}
b) 初始化 BroadCastReceiver
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 class
中放置一个接收器BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
textView.setText(intent.getStringExtra("extra"));
}
};
b) 注册 BroadCastReceiver
registerReceiver(broadcastReceiver , new IntentFilter("trigger_broadcust"));
c) 调用 sendBroadcast
Intent intent = new Intent("trigger_broadcust");
intent.putStringExtra("extra", "data");
sendBroadcast(intent);