本地广播
发送方
@Override
package com.example.eventbus;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
public class PublishDialogFragment extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
//创建Dialog的方法
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("publish");
String[] items = {"success","failure"};
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case 0:
//Success
Intent intent = new Intent();
intent.setAction(MainActivity.HANDLE_EVENT_ACTION);
intent.putExtra(MainActivity.STATUS,true);
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
break;
case 1:
//failure
Intent it = new Intent();
it.setAction(MainActivity.HANDLE_EVENT_ACTION);
it.putExtra(MainActivity.STATUS,false);
LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(it);
break;
}
}
});
//最后一步很重要的
return builder.create();
}
}
接收方
package com.example.eventbus;
import androidx.appcompat.app.AppCompatActivity;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
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.widget.Button;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private Button but;
private ImageView iv;
private LocalBroadcastManager manager;
//广播携带的内容的key
public static final String STATUS = "status";
//静态常量-->广播标签
public static final String HANDLE_EVENT_ACTION = "Handle_event_Action";
private final IntentFilter filter = new IntentFilter(HANDLE_EVENT_ACTION);//过滤器在这就是一个标记,代表哪一个广播
//广播接收器
private final BroadcastReceiver mReceive = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//接收后的业务,先达到广播的Action
String action = intent.getAction();
//判断Action标签是不是我们的这个广播
if (HANDLE_EVENT_ACTION.equals(action)) {
//拿到发过来的广播内容的key
boolean status = intent.getBooleanExtra(STATUS, false);
if (status) {
iv.setImageResource(R.drawable.ic_happy);
}else {
iv.setImageResource(R.drawable.ic_sad);
}
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("subscriber");
but = findViewById(R.id.button);
iv= findViewById(R.id.imageView);
initEvent();
}
private void initEvent() {
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//弹出Dialog
PublishDialogFragment fragment = new PublishDialogFragment();
fragment.show(getSupportFragmentManager(),"Publish");
}
});
}
@Override
protected void onStart() {
super.onStart();
//注册广播
manager = LocalBroadcastManager.getInstance(this);
manager.registerReceiver(mReceive,filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
manager.unregisterReceiver(mReceive);
}
}