Adam Myczkowski
Adam Myczkowski

Reputation: 95

Hiding BottomNavigationView from different fragment

my app has 3 fragments that are being inflated from mainActivity with BottomNavigationView. One of the fragments uses RecyclerView and is scrollable, with BottomNavigationView the last item in recyclerView is being covered up. According to Google's guidelines bottomNavigationView should hide on scroll down and show on scroll up. It's easy enough to make it hide from the mainAcitivity but it doesn't work when Im trying to hide it from the other fragment. How do I do this properly? This code from recyclerView checks for the scroll state:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            if (dy > 0) {
                //mainActivity.setNavigationVisibility(false);
            } else if (dy < 0 ) {
                //mainActivity.setNavigationVisibility(true);
            }
        }

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

            super.onScrollStateChanged(recyclerView, newState);
        }
    });

And should call this method in the mainActivity that hides the bottomNavigationView:

public void setNavigationVisibility(boolean visible) {
    if (navigation.isShown() && !visible) {
        navigation.setVisibility(View.GONE);
    }
    else if (!navigation.isShown() && visible){
        navigation.setVisibility(View.VISIBLE);
    }
}

Upvotes: 3

Views: 4955

Answers (1)

Jaymin Soni
Jaymin Soni

Reputation: 116

try this

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        if (dy > 0) {
            ((MainActivity)getActivity()).setNavigationVisibility(false);
        } else if (dy < 0 ) {
            ((MainActivity)getActivity()).setNavigationVisibility(true);
        }
    }

    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

        super.onScrollStateChanged(recyclerView, newState);
    }
});

When you use activity method from fragment then you have to create your method public and you can access that method by typecasting.

Upvotes: 3

Related Questions