单击后退按钮后,片段无法正确显示

问题描述:

我设计了一个由一些片段组成的应用程序。 MainScreen的主屏幕由一个工具栏和一个显示一些标签及其相应片段的框架布局组成。对于Mainscreen单击后退按钮后,片段无法正确显示

<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> 

对于FrameLayout里tab_and_view

布局文件,布局类似下面

<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> 

我用从谷歌SlidingTabLayout例如建立标签。 然后我设计了一个页面作为主页,这就是所谓的Home_Page。 Home_Page只有一个ListView项目来显示一些选择,它将显示在MainScreen的ViewPager中。对于Home_Page

版式文件:

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

我的设计是,当我点击在home_function_list一个项目,片段将交换:

<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> 

其处理交换在Home_Page.java的代码到另一个片段。例如,从Home_Page到New_Content。 在New_Content中,有一个可以返回home_page的按钮。

在按钮的onClickListener中,我使用这些代码来执行操作。

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

参考the picture after pressing back button in New_Content,我发现,首页的内容和搜索选项卡失踪之前,我点击设置和应用简介。所以我想知道如何在New_Content中按下“返回”按钮后再次显示标签中的所有内容。

谢谢!

我不知道是否有更有效的方法,但是当我遇到这个问题时使用了片段+活动+后退按钮,我通过在相关活动中实现onBackPressed()来解决该问题,我的片段管理器用于我的背部堆叠。基于后面的堆栈(这可以让我确定从哪里按下),然后我就可以正确地重建我的UI元素。在我的情况下,这样做非常重要,因为我有一个用作应用程序操作栏的工具栏,并且我需要在整个应用程序中导航时更改此工具栏的外观。

因此,例如,我做的是:

@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

这一切都是假设在主要活动的地方就是每个选项卡的内容在被加载 – gabe3vino

+0

总的来说,我认为你所遇到的问题。当你点击New_Content中的那个按钮时,你正在创建一个新的Tab Fragment,它会改变你的backstack,当它听起来像你真正想做的事情是返回到应该已经在你的后台堆栈中的原始主页片段点 – gabe3vino

+0

其实我只是想回到原来的主页当我按下回来,我想知道如何做到这一点 –