Android Fragment - BroadcastReceiver call fragment method

Viewed 21444

I have a BroadcastReceiver which receives broadcast sent to a Fragment. I'm getting the broadcast but how can I call a method from the Fragment itself? I basically need to update a List once the broadcast arrives, the List & update method are part of the Fragment.

public class FragmentReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(action != null && action.equals("AllTasksFragmentUpdate"))
        {
            //
        }
    }
}

Registering the receiver:

    @Override
public void onCreate(final Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getActivity().registerReceiver(new FragmentReceiver(), new IntentFilter("AllTasksFragmentUpdate"));
}

How can I call the method from the Fragment?

4 Answers

Supposing that you have an Activity named MyActivity and at some point in your code, you want to make a broadcast to be received by a Fragment named MyFragment. You can do it like this:

In MyActivity, use LocalBroadcastManager to make the broadcast with a filter:

String filter = "thisIsForMyFragment";
Intent intent = new Intent(filter); //If you need extra, add: intent.putExtra("extra","something");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

In MyFragment, inside onCreateView() add this to register the receiver:

LocalBroadcastManager.getInstance(getActivity()).registerReceiver(myBroadcastReceiver,
        new IntentFilter("thisIsForMyFragment"));

Following, In MyFragment (outside onCreateView()) create the receiver method to receive the broadcast:

private final BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver()
{
    @Override
    public void onReceive(Context context, android.content.Intent intent) {
        Toast.makeText(getActivity(), "Broadcast received!", Toast.LENGTH_SHORT).show();//Do what you want when the broadcast is received...

    }
};

Finally, in MyFragment add this to unregister the receiver onDestroyView:

@Override
public void onDestroyView()
{
    super.onDestroyView();
    LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(myBroadcastReceiver);
}
activity!!.registerReceiver(receiver, IntentFilter(DataKeys.STATUS))
Related