再重復一遍我遇到的問題,就是在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(); } }); } }
代碼地址:https://download.csdn.net/detail/jason0539/6832899
作者:jason0539
微博:https://weibo.com/2553717707
博客:https://blog.csdn.net/jason0539(轉載請說明出處)