两个 Activity 之间可以通过发送广播来控制另外一个 activity 的 UI 更新, 比如团购 App 里: 我下了个订单之后, 那么我可以通过发送广播通知 "我的订单" 里面的内容内容自动更新.
再重复一遍我遇到的问题, 就是在 MainActivity 里面打开 AnotherActivity 去执行一些操作, 相应的改变 MainActivity 里的一些布局或者执行一些动作, 最开始想到的就是把 MainActivity 的 Handler 直接传给 AnotherActivity, 好像不可行, 就有了这篇和上一篇文章.
上一篇方案一是通过重写 application 来在两个 activity 之间共享 Handler 的, 今天这个方案是通过广播机制解决本来想要通过传递 handler 来实现的功能, 算是 Activity 之间传递 Handler 问题的变通方案,
其实很简单, 就是 Broadcast 的应用, 替换了原来想要通过共享 handler 解决的思路.
代码如下
- MainActivity:
- package jason.broadcastinsteadofhanlderdemo;
- import Android.App.Activity;
- import Android.content.BroadcastReceiver;
- import Android.content.Context;
- import Android.content.Intent;
- import Android.content.IntentFilter;
- import Android.os.Bundle;
- import Android.view.View;
- import Android.view.View.OnClickListener;
- import Android.widget.Button;
- import Android.widget.TextView;
- public class MainActivity extends Activity {
- TextView textView;
- Button sButton;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- textView = (TextView) findViewById(R.id.show);
- sButton = (Button) findViewById(R.id.startAnother);
- sButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- startActivity(new Intent(MainActivity.this,AnotherActivity.class));
- }
- });
- IntentFilter filter = new IntentFilter(AnotherActivity.action);
- registerReceiver(broadcastReceiver, filter);
- }
- BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- // TODO Auto-generated method stub
- textView.setText(intent.getExtras().getString("data"));
- }
- };
- protected void onDestroy() {
- unregisterReceiver(broadcastReceiver);
- };
- }
- AnotherActivity:
- package jason.broadcastinsteadofhanlderdemo;
- import Android.App.Activity;
- import Android.content.Intent;
- import Android.os.Bundle;
- import Android.view.View;
- import Android.view.View.OnClickListener;
- import Android.widget.Button;
- public class AnotherActivity extends Activity {
- public static final String action = "jason.broadcast.action";
- Button update;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.another);
- update = (Button) findViewById(R.id.updateMain);
- update.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Intent intent = new Intent(action);
- intent.putExtra("data", "yes i am data");
- sendBroadcast(intent);
- finish();
- }
- });
- }
- }
来源: http://www.bubuko.com/infodetail-3122474.html