我创建了一个应用程序,在该应用程序中我在我的主类 (Main Activity
) 中注册了一个广播接收器,每当我在 BroadcastReceiver
中收到一些东西时,我都想更新 UI例如我想显示一个警告框或设置我的 MainActivity
的一些 TextView 。我收到接收器中的所有值但无法设置它们,有人可以帮助我,以便我可以在 BroadcastReceiver
中更新我的 UI。
我的 BroadcastReceiver 类是 MainActivity 的内部类,如下所示:-
public class MainActivity extends Activity {
..........
public static class NissanTabBroadcast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences shrd = context.getSharedPreferences("NissanGallery", context.MODE_WORLD_READABLE);
type = shrd.getString("type", "null");
badges = shrd.getString("badge_count", "null");
//badge_tips_text.setText(badges);
/*Editor edit = shrd.edit();
edit.remove("type");*/
Toast.makeText(context, "" + type + "\n" + badge_tips_text.getText().toString(), Toast.LENGTH_LONG).show();
}
}
}
任何帮助将不胜感激
谢谢
最佳答案
我建议你使用 Handler。
- 在Activity中初始化一个Handler,例如:
handler = new Handler()
- 在构造函数中为 BroadcastReceiver 提供处理程序,就像我在上面为 NissanTabBroadcast 所做的那样
- 在
onReceive()
方法中使用 Handler 实例的post()
方法提交更新 UI 的 Runnable
这是我能想象到的最干净的解决方案。
public class MainActivity extends Activity {
private MyReceiver receiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
receiver = new MyReceiver(new Handler()); // Create the receiver
registerReceiver(receiver, new IntentFilter("some.action")); // Register receiver
sendBroadcast(new Intent("some.action")); // Send an example Intent
}
public static class MyReceiver extends BroadcastReceiver {
private final Handler handler; // Handler used to execute code on the UI thread
public MyReceiver(Handler handler) {
this.handler = handler;
}
@Override
public void onReceive(final Context context, Intent intent) {
// Post the UI updating code to our Handler
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "Toast from broadcast receiver", Toast.LENGTH_SHORT).show();
}
});
}
}
}
关于android - 如何在 BroadcastReceiver 中更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643385/