facetoe
facetoe

Reputation: 729

Fragment not added to backstack

I'm having trouble with getting Fragments and the backstack to work.

I've got a layout with a FrameLayout for holding various fragments and another fragment:

<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/filterableListContainer"
    android:layout_weight="50">
</FrameLayout>


<fragment class="com.facetoe.remotempd.fragments.PlayerBarFragment"
          android:id="@+id/playerBarFragment"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_weight="1"
          tools:layout="@layout/player_bar"/>
</LinearLayout>

When I start the Activity that uses this layout I add the fragment to the FrameLayout like so:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    if (findViewById(R.id.filterableListContainer) != null) {

        // However, if we're being restored from a previous state,
        // then we don't need to do anything and should return or else
        // we could end up with overlapping fragments.
        if (savedInstanceState != null) {
            return;
        }

        // Create a new Fragment to be placed in the activity layout
        ArtistListFragment listFragment = new ArtistListFragment();

        // Add the fragment to the 'fragment_container' FrameLayout
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.filterableListContainer, listFragment);
        ft.addToBackStack(null);
        ft.commit();
    } else {
        Log.e(TAG, "Couldn't find filterableListFragment");
    }

}

When the user clicks an item, I attempt to replace the fragment with this code:

            ArtistAlbumsListFragment fragment = new ArtistAlbumsListFragment(getActivity(), albums);
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.filterableListContainer, fragment);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.addToBackStack(null);
        ft.commit();

However when I press the back button I get returned to the home screen. Can anyone tell me where I'm going wrong?

Upvotes: 1

Views: 1341

Answers (2)

facetoe
facetoe

Reputation: 729

Ok I fixed it. When I created the Activity in Intellij it created a subclass of ActionBarActivity. Removing ActionBarActivity and replacing it with Activity made the fragments transitions work as expected.

Upvotes: 3

MohsinSyd
MohsinSyd

Reputation: 175

Dont add ft.addToBackStack(null) this statement.

ArtistAlbumsListFragment fragment = new ArtistAlbumsListFragment(getActivity(), albums); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.filterableListContainer, fragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.commit();

Upvotes: 0

Related Questions