2016-06-28 3 views
0

Ich habe eine App entwickelt, die aus einigen Fragmenten besteht. Der Hauptscreen, MainScreen, besteht aus einer Werkzeugleiste und einem Framelayout, in dem einige Registerkarten und ihre entsprechenden Fragmente angezeigt werden.Fragmente können nicht korrekt angezeigt werden nach dem Klicken zurück Schaltfläche

Layout-Datei für Hauptseite

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

<include layout="@layout/toolbar" 
/> 

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id="@+id/tab_and_view" /> 
</LinearLayout> 

Für die FrameLayout tab_and_view ist das Layout wie unten

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

<com.android.luftschlafer.engdictionary.Tab.SlidingTabLayout 
    android:id="@+id/tabs" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorAccent"/> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="0px" 
    android:layout_weight="1" /> 
</LinearLayout> 

ich das SlidingTabLayout Beispiel von Google verwendet, um die Registerkarten zu bauen. Dann habe ich eine Seite als Homepage entworfen, die Home_Page heißt. Home_Page hat nur ein ListView-Element, um einige Auswahlen anzuzeigen, und es wird im ViewPager von MainScreen angezeigt.

Layout-Datei für Home_Page:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".Corr_Pages.HomePage"> 

<!-- TODO: Update blank fragment layout --> 
<ListView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/home_function_list"/> 
</RelativeLayout> 

Die Codes, die den Austausch in Home_Page.java handhaben:

FragmentTransaction ftran=getFragmentManager().beginTransaction(); 
ftran.replace(R.id.tab_and_view,new NewContent()); 
ftran.addToBackStack("HomePage"); 
ftran.commit(); 

Mein Entwurf ist, dass, wenn ich einen Artikel in home_function_list geklickt haben, wird das Fragment tauschen zu einem anderen Fragment. Zum Beispiel von Home_Page zu New_Content. In New_Content gibt es eine Schaltfläche, die von home_page zurückgeben kann.

Im OnClickListener der Schaltfläche habe ich diese Codes verwendet, um die Operation durchzuführen.

FragmentTransaction ftran=getFragmentManager().beginTransaction(); 
ftran.replace(R.id.tab_and_view, new TabFragment()); 
ftran.commit(); 

Siehe the picture after pressing back button in New_Content, fand ich, dass der Inhalt von Start- und Such Tabs fehlten, bevor ich Einstellungen geklickt und über App. Also frage ich mich, wie ich alle Inhalte in den Tabs wieder anzeigen lassen kann, nachdem ich in New_Content die "Zurück" -Schaltfläche gedrückt habe.

Danke!

Antwort

0

Ich weiß nicht, ob es einen effizienteren Weg gibt, aber wenn ich dieses Problem mit Fragmenten + Aktivitäten + die Zurück-Taste habe, löse ich es durch die Implementierung von OnBackPressed() in meinen relevanten Aktivitäten und innerhalb dieser Prüfung mein Fragmentmanager für meinen Backstack. Basierend auf diesem Backstack (mit dem ich feststellen kann, von wo aus die Back gedrückt wurde), kann ich dann meine UI-Elemente korrekt neu aufbauen. In meinem Fall ist dies wichtig, da ich eine Symbolleiste habe, die als Aktionsleiste für Apps fungiert, und ich muss das Erscheinungsbild dieser Symbolleiste ändern, während ich durch die App navigiere.

So zum Beispiel, was ich tue, ist:

@Override 
    public void onBackPressed() { 
     if (mFragManager.getBackStackEntryCount() > 1) { 

      mFragManager.popBackStack(); 
      getSupportActionBar().setTitle(R.string.action_settings); 
      getSupportActionBar().setSubtitle(""); 


     } else if (mFragManager.getBackStackEntryCount() > 0) { 
      mFragManager.popBackStack(); 

      getSupportActionBar().setTitle(R.string.app_name); 
      getSupportActionBar().setIcon(null); 

      mDrawerToggle.setDrawerIndicatorEnabled(true); 
      statusbar.setVisibility(View.VISIBLE);; 

      setTheme(R.style.AppTheme); 


     } else { 
      super.onBackPressed(); 
     } 
    } 
+0

Dies alles, was irgendwo in Ihrer Haupttätigkeit unter der Annahme ist, wo der Inhalt der einzelnen Registerkarten in geladen wird – gabe3vino

+0

Im Allgemeinen denke ich, das Problem Sie konfrontiert. Erstellen Sie ein neues Tab-Fragment, wenn Sie auf diese Schaltfläche in "New_Content" klicken, wodurch Ihr Backstack geändert wird, wenn es so klingt, als würden Sie das ursprüngliche Homepage-Fragment wiederherstellen, das sich bereits in Ihrem Backstack befinden sollte Punkt – gabe3vino

+0

Eigentlich möchte ich nur zurück zur ursprünglichen Homepage gehen, wenn ich Zurück drückte, und ich frage mich, wie man das macht –

Verwandte Themen