Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Snackbar is not working within fragment class

You can also use:

getActivity().findViewById(android.R.id.content)

like this:

Snackbar snackBar = Snackbar.make(getActivity().findViewById(android.R.id.content),
           "Look at me, I'm a fancy snackbar", Snackbar.LENGTH_LONG);
snackBar.show();

See this


I have solved this:

It is fine if we do not include CoordinatedLayout to my fragment_home.xml

Solution:

Defined : private RelativeLayout mRoot;

Now initialize in initUI(View view)

mRoot = (RelativeLayout) view.findViewById(R.id.mainrl);

and on Button click event put the following code:

 Snackbar.make(mRoot, "Had a snack at Snackbar", Snackbar.LENGTH_LONG).show();

Now main thing about this is:

just change current theme to Theme.AppCompat.Light.NoActionBar

It Done.!!!


SnackBar make method takes a view and from that view it trails up the heirarchy until it finds a suitable layout to show, if you had an exception this means that you didn't add CoordinatedLayout to your project

private static ViewGroup findSuitableParent(View view) {
        ViewGroup fallback = null;

        do {
            if(view instanceof CoordinatorLayout) {
                return (ViewGroup)view;
            }

            if(view instanceof FrameLayout) {
                // android.R.id.content
                if(view.getId() == 16908290) {
                    return (ViewGroup)view;
                }

                fallback = (ViewGroup)view;
            }

            if(view != null) {
                ViewParent parent = view.getParent();
                view = parent instanceof View?(View)parent:null;
            }
        } while(view != null);

        return fallback;
    }