Search code examples
android-studioandroid-fragmentsandroid-recyclerviewandroid-toolbarwhatsapp

Overlay toolbar with other toolbar when item is selected in RecyclerView which is inside a fragment


To illustrate what I mean with this, it is similar to WhatsApp, where various options are displayed in the toolbar when a chat is selected.

enter image description here

enter image description here

I have a similar layout, so a MainActivity with Fragments containing RecyclerViews. Now when an item in a RecyclerView is selected I would like to get a similar behaviour as in WhatsApp. The RecyclerViews have an Adapter that implements an OnClickListener. However, from this Adapter I do not seem to have access to Views from the MainActivity. I tried the following (inside the OnClick method in the Adapter), but it did not work since the view could not be found.

View view = getActivity().findViewById(R.id.toolbar_main_activity);
if( view instanceof Toolbar) {
    Toolbar toolbar = (Toolbar) view;
    toolbar.setTitle("TestTitle");
}

Does anyone know how to get the intended behavior or have a reference to a tutorial?

UPDATE: for who is also stuck with this and this is still quite confusing, here is how I solved it in my own words

My Fragment contains the Interface by adding the following code to it;

OnItemsSelected mCallBack;

public interface OnItemsSelected {
    void onToolbarOptions(String title);
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    mCallback = (OnItemsSelected) getActivity();
}

Also I passed 'mCallback' to the adapter like this;

MyAdapter adapter = new MyAdapter(myList, mCallback);

The RecyclerView adapter implements OnClickListener. In the OnClick method I called; 'mCallBack.onToolbarOptions("someTitle");'. And finally I made my MainActivity implement the method; 'implements myFragment.onItemsSelected' and I added the following code to it also;

@Override
public void onToolbarOptions(String title) {
    toolbar.setTitle(title);
}

With this, only the title is changed, but from this it is quite easy to make other changes to the toolbar, such as changing the menu items.


Solution

  • Inside your Fragment you make an Interface and a global variable like this:

    OnItemsSelected mCallBack;
    
    public interface OnItemsSelected {
        public void onToolbarOptions();
    }
    

    Then when in your RecyclerView items are selected or clicked you call:

    mCallBack.onToolbarOptions();
    

    In your Activity implement the Interface like this plus the method onToolbarOptions():

    public static class YourActivityName extends AppCompatActivity
        implements YourFragmentName.OnItemsSelected {
    
       public void onToolbarOptions(){
        // CHANGE YOUR TOOLBAR HERE
       }
    
      //.....OTHER STUFFS IN YOUR ACTIVITY
    }