0

I am really new to android and I am really frustrated with it. I want to switch between fragments in drawer menu. However, the screen stays the same. In the drawer it says that I am on a particular fragment but I see no change. I set a different background to differentiate between them.

I believe that fragment manager is deprecated based on what people are saying but I don't know how to change it with. Also the thin is I don't know which tutorials are out of date because I have very little knowledge about android development.

Fragment code:

public class ToolsFragment extends Fragment {

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_tools, container,false);
}

}

Main activity code:

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private DrawerLayout drawer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
            R.string.navigation_drawer_open,R.string.navigation_drawer_close);

    drawer.addDrawerListener(toggle);
    toggle.syncState();

    if (savedInstanceState == null) {

        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new CharacterFragment());
        navigationView.setCheckedItem(R.id.nav_characters);
    }


}

@Override
public void onBackPressed() {
    if (drawer.isDrawerOpen(GravityCompat.START)){
        drawer.closeDrawer(GravityCompat.START);
    } else{
        super.onBackPressed();
    }
}


@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()){
        case R.id.nav_characters:

            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new CharacterFragment());
            break;
        case R.id.nav_episodes:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new EpisodesFragment());
            break;
        case R.id.nav_tools:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new EpisodesFragment());
            break;
    }
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

}

1 Answers1

1

You forgot to call commit()

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new CharacterFragment()).commit();

Shayan Samad
  • 294
  • 1
  • 10
  • Worked! Thank you! But here's another problem. I want the main activity to be character fragment. It's selected in the drawer menu, but the screen is not the actual fragment. What can I do? – Spreceriany Apr 15 '21 at 08:53
  • In your Main Activity's onCreate Method call the fragment transction like this getSupportFragmentManager().beginTransaction().addToBackStack(Constant.CharcterScreen).add(R.id.frameLayout, new CharcterFragment()).commit(); – Shayan Samad Apr 15 '21 at 08:58
  • What's the Constat.CharacterScreen? Java can't seem to find it – Spreceriany Apr 15 '21 at 10:32
  • its fragment name, you can use any String or even null – Shayan Samad Apr 15 '21 at 10:34
  • If I set it to null, the application crash and by the name I don't understand what kind of string should I put there. You mean the layout or the character class? – Spreceriany Apr 15 '21 at 10:47
  • It can be any string, Its just a string name assinged to fragments, Refer to below links, https://stackoverflow.com/a/22985052/9502601 https://developer.android.com/reference/androidx/fragment/app/FragmentTransaction#addToBackStack(java.lang.String) – Shayan Samad Apr 15 '21 at 10:55