Haidar Hammoud
Haidar Hammoud

Reputation: 83

Switching Activities

I've been researching a solution to my problem but not a single result fixes my problem.

I have five Java activities. Each activity has five buttons, four to the other activities and one to itself. It's basically just a bar of bottoms at the bottom of the page.

My issue is that let's say I'm in one activity, and then I click that button to the activity again, it opens and loads an entirely new activity. And then when I click back, it shows the previous activity open as I left it. But if I press it ten times, I need to click back ten times. Also, if I switch between each activity twice and I want to click back to main to exit, I need to click back ten times instead of five.

I want it to be such that when I click a button, it opens the activity. If I press the button again, it does nothing if I'm in that activity. And if I'm switching between activities and I repress an activity I already opened, I want that to be brought to the top of the stack from its lower location, not added. So at most, I only want five activities running. It's a very confusing problem as I see people suggesting to use intent flags, which I'm not sure if I place them in the manifest, which does nothing with I try. And I've seen people suggest using LaunchMode single instance, which also does nothing.

Upvotes: 1

Views: 79

Answers (1)

Sammy T
Sammy T

Reputation: 1924

I really think fragments are the best method here. And yes, it's a little tricky but you can use fragments within fragments. For navigating without creating extra instances, I think you might be looking for something along the lines of this:

 public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if(id == R.id.nav_home){

        Fragment newFragment; 
        FragmentManager fragmentManager = getSupportFragmentManager();

        // Look for fragment by tag
        Fragment foundFragment = fragmentManager.findFragmentByTag(MAIN_FRAGMENT);

        if(foundFragment != null) { //if fragment's already in the backstack
            newFragment = foundFragment; //replace fragment with backstack fragment
        }else{
            newFragment = new MainFragment(); // use a new fragment instance
        }

        // Add new fragment instance to fragment manager
        fragmentManager.beginTransaction()
                .replace(R.id.fragment_container, newFragment, MAIN_FRAGMENT)
                .addToBackStack(MAIN_FRAGMENT)
                .commit();

    }
    // ...
}

Upvotes: 2

Related Questions