I create a fragment of the settings and can not call it. Fragment code.

public class SettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.fragment_preference, rootKey); } } 

Here I call fragments public class MainActivity extends AppCompatActivity {

 private BottomNavigationView bottomNavigationView; private FrameLayout frameLayout; private HomeFragment homeFragment; private AddFragment addFragment; private SettingsFragment settingsFragment; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bottomNavigationView = findViewById(R.id.main_nav); frameLayout = findViewById(R.id.main_frame); homeFragment = new HomeFragment(); addFragment = new AddFragment(); settingsFragment = new SettingsFragment(); setFragment(homeFragment); bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()){ case R.id.nav_home: bottomNavigationView.setItemBackgroundResource(R.color.darkTurquise); setFragment(homeFragment) ; return true; case R.id.nav_add: bottomNavigationView.setItemBackgroundResource(R.color.darkTurquise); setFragment(addFragment); return true; case R.id.nav_setting: bottomNavigationView.setItemBackgroundResource(R.color.darkTurquise); Fragment fragment = getFragmentManager().findFragmentById(R.id.fragmentSetting); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); if (savedInstanceState == null){ fragmentTransaction.replace(R.id.fragmentSetting, fragment); fragmentTransaction.commit(); } return true; default: return false; } } }); } private void setFragment( android.support.v4.app.Fragment fragment) { android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.main_frame, fragment); fragmentTransaction.commit(); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); return super.onOptionsItemSelected(item); } 

}

 Fragment fragment = getFragmentManager().findFragmentById(R.id.fragmentSetting); 

Returns null. What could be the problem?

  • as I understand in the markup of your activit you add fragments to the container with id main_frame. The problem is that you did not add the settingsFragment to the manager fragment. Call setFragment (settingsFragment); when you click on settings instead of the current implementation - Yury Pashkov
  • one
    you also use fragments from the support library (support.v4), and you call the fragment manager in some places from the API (getFragmentManager (), not getSupportFragmentManager ()) - you need to bring all the work with fragments to something one, preferably to the library of support - pavlofff

0