Tim
Tim

Reputation: 13258

Android: switch to a new fragment inside a fragment?

I have an Android application with a MainActivity and I do this to create navigational tabs in onCreate:

ActionBar myActionBar = getActionBar();
myActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
Tab tab = myActionBar.newTab().setText("FirstTab").setIcon(R.drawable.first_tab)
    .setTabListener(new TabListener<FirstTabFragment>(this, "FirstTab", 
    FirstTabFragment.class));
... more tabs ...

The TabListener, I use this from developer.android.com: http://developer.android.com/reference/android/app/ActionBar.html#newTab():

public static class TabListener<T extends Fragment> implements ActionBar.TabListener {
    ...
    public TabListener(Activity activity, String tag, Class<T> clz) { ... }
}

So if a user clicks on the first tab, my fragment FirstTabFragment is called and executes onCreateView.

My problem is, if a user now clicks a button I do the following and I do not know how to switch to the next fragment:

private OnClickListener firstTabListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        if (v == button1) {
            Intent intent = new Intent(???, MyDetailsFragment.class);
            startActivity(intent);
        } else if (...) {
            ...
        }
    }
};

The MyDetailsFragmentshould show details to the selected item (button click), so I want to drill down to the details fragment and want to give some extra data to the new fragment, so the detail fragment knows which details of which selected item it should display. The selected tab should not change and the back button should go back to the FirstTabFragment page.

I think I should start a new fragment, but it is not possible, the name of the method startActivity tells me that I start a new activity and not a fragment. So, I have to use the MainActivity and put into there the new fragment? (I do not use the android-support-v4.jar library, because I only target Android 4 devices)

How can I solve this problem? Any ideas?

Upvotes: 0

Views: 905

Answers (1)

CommonsWare
CommonsWare

Reputation: 1006604

From the fragment, call a method on the hosting activity, telling it about the button click event. The activity can then do whatever is appropriate.

Personally, I think that totally replacing the contents of a tab is inappropriate in the vast majority of cases, but you are certainly welcome to do it.

Upvotes: 1

Related Questions