切换 Fragment 后显示隐藏的工具栏

3

我有以下问题:

主活动(main_activity):

<android.support.design.widget.CoordinatorLayout
    .......>


    <android.support.design.widget.AppBarLayout
        ......>

        <android.support.v7.widget.Toolbar
            app:layout_scrollFlags="scroll|enterAlways"
            ....../>

    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        ....../>

</android.support.design.widget.CoordinatorLayout>

当FrameLayout包含一个带有RecyclerView的片段时,向上滑动RecyclerView会滚动工具栏。

以下情况是问题:

  • 用户通过滚动RecyclerView向上滚动工具栏
  • 用户从左侧滑动并打开抽屉
  • 然后用户导航到另一页
  • 屏幕上显示另一个片段但工具栏仍然隐藏

这段代码执行片段更改:

fragment = .. get new fragment ..
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.commit();

加入这段代码并不能帮助解决问题:

getSupportActionBar().show();

我也尝试过:
toolbar.translationY(0).start();

但是没有成功。

我如何在程序中使滚动到顶部的工具栏重新向下滚动?


2
没关系。appBarLayout.setExpanded(true, true);解决了问题。 - Wolf359
嗯,我遇到了同样的问题。.setExpanded()确实可以展开工具栏,但是该片段中的所有内容都被推下来了。你有遇到类似的情况吗? - Orbit
是的,我遇到了这个问题,但不幸的是我不得不暂时禁用滚动工具栏(它与我正在使用的滚动条冲突),并推迟解决这个问题。不过有一件事,我尽量在整个应用程序中只使用一个Activity,并仅使用Fragments。一些片段具有滚动内容,而其他片段则没有。也许使用多个Activities可以解决这个问题? - Wolf359
我正在使用类似的架构(主要是片段)。最终,我只是在被推下来的内容下方放置了一个边距,以强制将其推回上方。看起来还不错,但我仍然对正确的解决方案感兴趣。谢谢回复。 - Orbit
如果appBarLayout.setExpanded(true, true)对你有帮助的话,你应该将其作为答案提供。 ;) - Jason Saruulo
1个回答

6
我最终打电话了。
appBarLayout.setExpanded(true, true)

在每个片段创建过程中,
onCreateView

抽象类的方法,每个片段都继承自它:
public abstract class AbstractFragmentBase extends Fragment {
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // other code
        customAppBar.setExpanded(true, true);
        // other code
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接