我设计了一个由一些片段组成的应用程序。主屏幕,MainScreen包含一个工具栏和一个framelayout,它显示一些选项卡及其相应的片段。
主界面的布局文件
df1 = df.set_index(['name', 'name1', 'name2'])
.groupby('cat')['score']
.nlargest(3)
.reset_index(name='score')
对于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">
<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>
我使用Google的SlidingTabLayout示例来构建标签。 然后我设计了一个页面作为主页,称为Home_Page。 Home_Page只有一个ListView项目可以显示一些选项,它将显示在MainScreen的ViewPager中。
Home_Page的布局文件:
<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>
在Home_Page.java中处理交换的代码:
<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_function_list中的一个项目时,片段将交换到另一个片段。例如,从Home_Page到New_Content。 在New_Content中,有一个可以返回home_page的按钮。
在按钮的onClickListener中,我使用这些代码来执行操作。
FragmentTransaction ftran=getFragmentManager().beginTransaction();
ftran.replace(R.id.tab_and_view,new NewContent());
ftran.addToBackStack("HomePage");
ftran.commit();
请参阅the picture after pressing back button in New_Content,我发现在单击“设置”和“关于应用程序”之前,“主页”和“搜索”选项卡的内容都丢失了。所以我想知道如何在按下&#34; Back&#34;之后再次显示标签中的所有内容。 New_Content中的按钮。
谢谢!
答案 0 :(得分:0)
我不知道是否有更有效的方法,但是当我遇到碎片+活动+后退按钮这个问题时,我通过在我的相关活动中实现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();
}
}