2016-06-02 30 views
0

Ich bin der vogella tutoria l über Multi-Panel-Entwicklung in Android folgen.Überprüfen, ob Fragment existiert

Jetzt würde ich gerne prüfen, ob ein Detailfragment vorhanden ist (Mehrfensterlayout aktiviert), um es zu entfernen und es erneut mit neuen Daten hinzuzufügen. Ich brauche das, um die Detailansicht zu aktualisieren, wenn der Benutzer etwas im Hauptfragment auswählt.

Wie bereits angedeutet im Tutorial mir wie das für das Fragment bin Überprüfung:

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..."); 
     } 

Mein Problem ist, dass es immer falsch bekommt, auch wenn das Fragment existiert. Warum wird das Fragment nicht als vorhanden erkannt, wenn es im Layout mit mehreren Fenstern vorhanden ist?

Ich füge meine Fragmente wie das an das 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(); 

Die Tablette Layout-Datei:

<?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> 
+0

Versuchen fragment.isVisible() für die Unterstützung v4 Fragment –

Antwort

1

Während damit Fragment Add Variablenwert zu schaffen zB

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

Sie können findFragmentByTag() Funktion verwenden Fragment zu erhalten, wenn es null das Fragment gibt nicht existieren.

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

zum Beispiel: - http://wiki.workassis.com/android-load-two-fragments-in-one-framelayout/

0

Pls ändern
ReviewMaschineFragment fragment = (ReviewMaschineFragment) getFragmentManager().

zu

ReviewMaschineFragment fragment = (ReviewMaschineFragment) getSupportFragmentManager(). 
+0

ich mich verändert habe es ReviewMaschineFragment Fragment = (ReviewMaschineFragment) getActivity() getSupportFragmentManager() (es innerhalb von aufgerufen wird. ein Fragment), aber der Code möchte immer noch eine neue Aktivität starten, auch wenn das Detailfragment vorhanden ist. – jublikon

+0

Wenn Sie ein Fragment aufrufen, sollten Sie getChildFragmentManager() verwenden. – phongvan

+0

Jetzt habe ich den Aufruf in die Aktivität verschoben. ReviewMaschineFragment Fragment = (ReviewMaschineFragment) getSupportFragmentManager(). findFragmentById (R.id.detailreviewcontainer); möchte noch eine neue Aktivität auf dem Tablet starten. Bitte korrigieren Sie mich, wenn ich falsch liege, aber das ist die Lösung, die Sie zuerst vorgeschlagen haben, oder? – jublikon

Verwandte Themen