Home > Back-end >  How can i access the find view by id of bottom nav outside on create in android
How can i access the find view by id of bottom nav outside on create in android

Time:08-12

I am working on an application where I am using bottom navigation on Home where i have three fragments on the second fragment called Post Ad I have a button called enter fragment zone through that i enter into another fragment now when I enter inside another fragment now I don't want there to show the bottom navigation so to hide it I am using a method inside my main activity called "setBottomNavigationVisibility" where I am writing code to set the visibility of bottom nav. but the problem is that it is throwing the null pointer exception in the mainactivty's method saying that

"void com.google.android.material.bottomnavigation.BottomNavigationView.setVisibility(int)' on a null object reference" on the method's line where i am setting the visibility

code of MainActivity

public class MainActivity extends AppCompatActivity {

NavController navController;
BottomNavigationView bottomNavigationView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    navController = Navigation.findNavController(this, R.id.fragmentContainerView);
    bottomNavigationView = findViewById(R.id.activity_main_bottom_navigation_view);
    NavigationUI.setupWithNavController(bottomNavigationView, navController);

}

public void setBottomNavigationVisibility(int visibility) {

    bottomNavigationView.setVisibility(visibility);

}}

On the above method when i am trying to setting the visibility on the line bottomNavigationView.setVisibility(visibility); that's where it is thrwoing the exception

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    binding = FragmentSecondBinding.inflate(inflater, container, false);

    // Inflate the layout for this fragment
    View view =  binding.getRoot();

    viewModel = new ViewModelProvider(requireActivity()).get(PageViewModel.class);

    ((MainActivity) requireActivity()).setBottomNavigationVisibility(View.GONE);

    binding.toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           Navigation.findNavController(view).navigate(R.id.action_secondFragment2_to_postad);
        }
    });

No Please guide me how can i solve this error.

CodePudding user response:

do something like this, define interface

interface DashboardActivityDelegate {
    void hideBottomBar();
    void showBottomBar();
}

your activity must implement this interface

and in your fragment in which you want to hide bottom nav view do this: declare global variable

private DashboardActivityDelegate dashboardActivityDelegate;

@Override
public void onAttach(Context context) {
      super.onAttach(context);
      if (context instanceof DashboardActivityDelegate) {
         dashboardActivityDelegate = (DashboardActivityDelegate)context;
      }

   }

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      if (dashboardActivityDelegate != null) {
         dashboardActivityDelegate.hideBottomBar();
      }
   }

@Override
public void onDestroy() {
      super.onDestroy();
      if (dashboardActivityDelegate != null) {
         dashboardActivityDelegate.showBottomBar();
      }

   }

CodePudding user response:

in fragment you want hide bottom bar, just call this line in onViewCreated

getActivity().findViewById(R.id.activity_main_bottom_navigation_view).setVisibility(View.GONE);

and when you leave fragment, call this line in onDestroy or onStop to visible bottom nav for another fragment:

getActivity().findViewById(R.id.activity_main_bottom_navigation_view).setVisibility(View.VISIBLE)
  • Related