项目开发中,常有这样的需求, 后面出来的一个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要好很多。习惯问题。