替换 android 片段时出现问题
Problems replacing an android fragment
我有:
我在 API 22 上使用最新的 Android 支持和设计库。我有一个名为 ProgressFragment 的片段,我 仅运行当我的应用首次安装时如下:
mProgressFragment = new ProgressFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.main_container, mProgressFragment, TAG_TASK_FRAGMENT)
.commit();
这是布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/progress_frag"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/toolbar"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
>
<ProgressBar
android:id="@+id/build_lib_progressbar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/progress_msg1"
android:layout_gravity="center"
android:textSize="22sp"
android:textColor="@color/text_primary"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/progress_msg2"
android:layout_gravity="center"
android:paddingTop="10dp"
android:textColor="@color/text_secondary"/>
</LinearLayout>
</LinearLayout>
此片段包含一个 AsyncTask。当它完成时,它被 AsyncTask 回调 onPostExecute()[= 内的 MainActivity 中的另一个片段(称为 MainFragment)替换72=] 像这样:
getSupportFragmentManager().beginTransaction()
.replace(R.id.main_container, new MainFragment())
.commit();
这是 MainFragment 布局:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/main_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<android.support.design.widget.AppBarLayout
android:id="@+id/main_appbar_layout"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<include layout="@layout/toolbar" />
<android.support.design.widget.TabLayout
android:id="@+id/main_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"
app:tabIndicatorHeight="4dp"
app:tabTextColor="@color/white"/>
</android.support.design.widget.AppBarLayout>
编辑:
这是 MainActivity 的布局:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Main content displayed here -->
<FrameLayout
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- Navigation Drawer -->
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_drawer_header"
app:menu="@menu/nav_view_menu"
android:background="#ffffff"
app:itemTextColor="@color/text_tertiary"
app:itemIconTint="#8b8b8b"
/>
问题:
当 ProgressFragment 中的 AsyncTask 完成并被 MainFragment 替换时,TabLayout 视图不显示标签:
我的应用程序在启动时有 2 条可能的路径。它要么:
添加 ProgressFragment(如果第一个 运行)-> 然后由 MainFragment 替换
否则添加 MainFragment(标签在这里显示正常)
两个 Fragment 替换都发生在 MainActivity 中。
问题涉及路径 1
编辑 2:
暂时在 MainActivity "fixes" 中调用 recreate()。虽然我不会称之为解决方案。稍后再回来。
更新:这是 v22.2.1 上的错误,已在较新版本中解决
在这里发现问题:https://code.google.com/p/android/issues/detail?id=180462
简单的解决方法:
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
我有:
我在 API 22 上使用最新的 Android 支持和设计库。我有一个名为 ProgressFragment 的片段,我 仅运行当我的应用首次安装时如下:
mProgressFragment = new ProgressFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.main_container, mProgressFragment, TAG_TASK_FRAGMENT)
.commit();
这是布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/progress_frag"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/toolbar"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
>
<ProgressBar
android:id="@+id/build_lib_progressbar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/progress_msg1"
android:layout_gravity="center"
android:textSize="22sp"
android:textColor="@color/text_primary"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/progress_msg2"
android:layout_gravity="center"
android:paddingTop="10dp"
android:textColor="@color/text_secondary"/>
</LinearLayout>
</LinearLayout>
此片段包含一个 AsyncTask。当它完成时,它被 AsyncTask 回调 onPostExecute()[= 内的 MainActivity 中的另一个片段(称为 MainFragment)替换72=] 像这样:
getSupportFragmentManager().beginTransaction()
.replace(R.id.main_container, new MainFragment())
.commit();
这是 MainFragment 布局:
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_coordinator_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/main_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<android.support.design.widget.AppBarLayout
android:id="@+id/main_appbar_layout"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<include layout="@layout/toolbar" />
<android.support.design.widget.TabLayout
android:id="@+id/main_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"
app:tabIndicatorHeight="4dp"
app:tabTextColor="@color/white"/>
</android.support.design.widget.AppBarLayout>
编辑:
这是 MainActivity 的布局:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:fab="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Main content displayed here -->
<FrameLayout
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- Navigation Drawer -->
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_drawer_header"
app:menu="@menu/nav_view_menu"
android:background="#ffffff"
app:itemTextColor="@color/text_tertiary"
app:itemIconTint="#8b8b8b"
/>
问题:
当 ProgressFragment 中的 AsyncTask 完成并被 MainFragment 替换时,TabLayout 视图不显示标签:
我的应用程序在启动时有 2 条可能的路径。它要么:
添加 ProgressFragment(如果第一个 运行)-> 然后由 MainFragment 替换
否则添加 MainFragment(标签在这里显示正常)
两个 Fragment 替换都发生在 MainActivity 中。
问题涉及路径 1
编辑 2:
暂时在 MainActivity "fixes" 中调用 recreate()。虽然我不会称之为解决方案。稍后再回来。
更新:这是 v22.2.1 上的错误,已在较新版本中解决
在这里发现问题:https://code.google.com/p/android/issues/detail?id=180462
简单的解决方法:
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});