2 years ago
#62703
Vittorio Campagnolo
Call fragment method from Bottom Navigation Activity
My problem it's that I created a default Bottom Navigation Activity and I want to call a fragment method from MainActivity. The problem is that I 'm not able to take a reference of the fragment. I tried all type of solution here in stackOverFlow.
a lot of method is deprecated.
//MAIN ACTIVITY
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
BottomNavigationView navView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(binding.navView, navController);
FragmentManager fm = getSupportFragmentManager();
HomeFragment fragment = (HomeFragment) fm.findFragmentById(R.id.navigation_home);
fragment.sayHi();
}
//FRAGMENT
public class HomeFragment extends Fragment {
private HomeViewModel homeViewModel;
private FragmentHomeBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
homeViewModel =
new ViewModelProvider(this).get(HomeViewModel.class);
binding = FragmentHomeBinding.inflate(inflater, container, false);
View root = binding.getRoot();
final TextView textView = binding.textHome;
homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
return root;
}
public void sayHi(){
Log.d("hi", "hi");
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
java
android
android-fragments
bottomnavigationview
0 Answers
Your Answer