jublikon
jublikon

Reputation: 3447

Check if Fragment exists

I am following the vogella tutorial about multi-pane development in Android.

Now I would like to check if the a detail fragment is existing (multi-pane layout activated) to remove it and add it again with fresh data. I need that to update the detail view when the user selects something in the main fragment.

As suggested in the tutorial I am checking for the Fragment like that:

  ReviewMaschineFragment fragment = (ReviewMaschineFragment) getFragmentManager().
                findFragmentById(R.id.detailreviewcontainer);
        if (fragment == null || ! fragment.isInLayout()) {
            Log.i("Detail Fragment", "Start new activity");
        }
        else {
            Log.i("Detail Fragment", "Update...");
        }

My Problem is that it always gets false even if the fragment exists. Why is it not detecting the fragment as existing if it is present in the multi-pane layout?

I add my fragments like that to the layout:

setContentView(R.layout.activity_main);

            toolbar = (Toolbar) findViewById(R.id.toolbar_main);
            setSupportActionBar(toolbar);

            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.add(R.id.maschinelistcontainer, new MaschineFragment());

            if(getResources().getBoolean(R.bool.dual_pane)){
                ft.add(R.id.detailreviewcontainer, new ReviewMaschineFragment());
            }

            ft.commit();

The tablet layout file:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <include
        android:id="@+id/toolbar_main"
        layout="@layout/toolbar"
        ></include>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="9"
        android:orientation="horizontal" >

        <FrameLayout
            android:id="@+id/maschinelistcontainer"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3"
           />

        <FrameLayout
            android:id="@+id/detailreviewcontainer"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="6"
            />

    </LinearLayout>

</LinearLayout>

Upvotes: 0

Views: 3650

Answers (2)

mdtuyen
mdtuyen

Reputation: 4528

Pls change

ReviewMaschineFragment fragment = (ReviewMaschineFragment) getFragmentManager().

to

ReviewMaschineFragment fragment = (ReviewMaschineFragment) getSupportFragmentManager().

Upvotes: 0

Bikesh M
Bikesh M

Reputation: 8373

While creating fragment add tag value with it eg

ft.add(R.id.maschinelistcontainer, new MaschineFragment(), "sometag");

You can use findFragmentByTag() function to get fragment if it is giving null the fragment is not exist.

Fragment fragmentA = fragmentManager.findFragmentByTag("sometag");
if (fragmentA == null) {
  // not exist
} else {
  //fragment exist
}

for example:- http://wiki.workassis.com/android-load-two-fragments-in-one-framelayout/

Upvotes: 3

Related Questions