0

Im trying to implement fragment to activity communication.

Went through android developer doc where an Activity object is passed to onAttach life cycle and set up the Fragment-Activity communication.

This documentation asks to pass Context object instead of Activity. I replaced all the Activity objects by Context objects in the life cycle method onAttach. But it is throwing a NullPointerException while calling the method of the interface from Fragment.

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        colourChangerInterface = (ColourChangerInterface) context;
    }
    catch (Exception exp){
        System.out.println("error!");
    }
}

Can anyone please give a small example of the usage in the new way ? Thanks

Edit :

Found this link where detail discussion is there on the same issue. The issue is because of the broken API 'onAttach()'; it doesn't get called at all when Context object is passed.

A simple and quick solution found from the above link is to move the code from onAttach to onCreate.

Community
  • 1
  • 1
Shree Harsha S
  • 665
  • 7
  • 14
  • Have you tried to create a new master/detail Activity using android-studio app-wizzard? that should contain every thing you need. – k3b Oct 05 '15 at 13:58
  • No, Im extending AppCompatActivity. Let me explore about master/detail activity.. – Shree Harsha S Oct 05 '15 at 14:07

1 Answers1

1

Here is a small example that will describe you the communication between Activity and Fragment. Suppose you have a Interface ICommunication. This is given below:

public interface ICommunication {
    public void testMethod();
}

Now you have a Activity name MainActivity that implements ICommunication then it must have implements the method testMethod(). This method will like this:

@Override
    public void testMethod() {
    Toast toast = Toast.makeText(getActivity(), "It's called from Fragment", Toast.LENGTH_SHORT).show();
}

Now, suppose this MainActivity belongs a Fragment name TestFragment . If you want to access testMethod() of MainActivity from TestFragment then you can simply call using this way :

((ICommunication)getActivity()).testMethod();

Here , TestFragment must be hold on MainActivity.

My related answer with source is here Thats it :)

Community
  • 1
  • 1
Md. Sajedul Karim
  • 6,749
  • 3
  • 61
  • 87