BroadcastReceiver 刷新前面的Activity组件

      项目开发中,常有这样的需求,   后面出来的一个Activity的操作时候,需要对前面已经出来的Activity的组件进行更改, 常见的就是,后面的业务需求需要对前面的界面组件数据的增加。   


    以前的开发中, 通过在Application中通过共享Handler来进行这种更改。 后面感觉这种不爽,关联太大了。 现在用BroadcastReceiver   来进行更改。  见代码: 


需要刷新的 Activity      

package com.demo.activity;

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 com.maizi.activity.R;

public class MainActivity extends Activity {

	private Button oneBtn,twoBtn;
	private final String UI_REFRESH_ACTION = "action.activity.refreshUI";
	private BroadcastReceiverHelper broadHelper;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main_activity);
		oneBtn = (Button) findViewById(R.id.btn_one_view);
		twoBtn = (Button) findViewById(R.id.btn_two_view);
		oneBtn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainActivity.this,SecondActivity.class);
				startActivity(intent);
			}
		});
	}
	
	// 注册广播  
	@Override
	protected void onResume() {
		super.onResume();
		broadHelper = new BroadcastReceiverHelper(this, oneBtn, twoBtn);
		broadHelper.register(UI_REFRESH_ACTION);
	}
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		unregisterReceiver(broadHelper);
	}
	
	
	

	// 刷新UI广播
	public class BroadcastReceiverHelper extends BroadcastReceiver {

		private Button oneBtn;
		private Button twoBtn;
		private Context context;

		public BroadcastReceiverHelper(Context context, Button oneBtn,Button twoBtn) {
			this.context = context;
			this.oneBtn = oneBtn;
			this.twoBtn = twoBtn;
		}

		public void register(String action) {
			IntentFilter filter = new IntentFilter();
			filter.addAction(action);
			registerReceiver(this, filter);
		}

		@Override
		public void onReceive(Context context, Intent intent) {
			if(intent != null){
				String action = intent.getAction();
				int flag = intent.getIntExtra("flag", 0);
				if (UI_REFRESH_ACTION.equals(action)) {
					if(flag == 100){
						this.oneBtn.setText("被广播进行刷新了.......1号按钮........");
					}else if(flag == 200){
						this.twoBtn.setText("被广播进行刷新了....2号按钮...........");
					}
					
				}
			}
			
		}

	}

}

中间的跳转的一个Activiity,  测试用


package com.demo.activity;

import com.maizi.activity.R;

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 SecondActivity extends Activity{
	
	private Button btn;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second_activity);
		btn = (Button) findViewById(R.id.btn_second_view);
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				 Intent intent = new Intent(SecondActivity.this,ThreedActivity.class);
				 startActivity(intent);
			}
		});
	}
	
	

}

发送广播, 操作

package com.demo.activity;

import com.maizi.activity.R;

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 ThreedActivity extends Activity {

	private Button oneBtn;
	private Button twoBtn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.threed_activity);
		oneBtn = (Button) findViewById(R.id.btn_one_view);
		twoBtn = (Button) findViewById(R.id.btn_two_view);
		oneBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setAction("action.activity.refreshUI");
				intent.putExtra("flag", 100);
				sendBroadcast(intent);
			}
		});

		twoBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setAction("action.activity.refreshUI");
				intent.putExtra("flag", 200);
				sendBroadcast(intent);
			}
		});

	}

}

通过返回键就可以看效果了。


思路就是,在需要刷新的页面中,注册一个广播,然后,在操作页面,进行发送广播就可以了。   这样感觉比共享Handler要好很多。习惯问题。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值