解决在 Material Design 中使用 CoordinatorLayout 和 TabLayout 崩溃的问题

阅读时长 5 分钟读完

最近,我和我的团队在开发一个 Android 应用程序时,遇到了在 Material Design 中使用 CoordinatorLayout 和 TabLayout 崩溃的问题。我们经过一番深入研究后解决了这个问题,现在我将把我们的经验分享给大家。

问题描述

我们的应用程序中有一个主界面,其中有一个 CoordinatorLayout 布局,里面包含一个 AppBarLayout 和一个 TabLayout。当我们切换 Tab 的时候,应用程序会崩溃并且会抛出以下异常:

-- -------------------- ---- -------
------------------------------- ------- -- ------ ------- ------ ------------------ ------------------------------------ -- - ---- ------ ---------
--- ---------------------------------------------------------------------------
--- -------------------------------------------------------------------------
--- ----------------------------------------------------------------------
--- ------------------------------------------------------------------
--- ---------------------------------------------------------------------------------------------------------
--- --------------------------------------------------------------------------------
--- ----------------------------------------------------------------------
--- ----------------------------------------------------------------------
--- -----------------------------------------------------------------------
--- ---------------------------------------------------------------------------------
--- ---------------------------------------------------
--- ---------------------------------------------------
--- ---------------------------------------------------
--- ---------------------------------------
--- ---------------------------------------------------------
--- -------------------------------------- -------
--- --------------------------------------------------------------------------------
--- -------------------------------------------------------------

解决方案

经过一番深入研究后我们发现了解决这个问题的方案。在 TabLayout 添加 Tab 的时候,如果 Tab 的内容为空的话,就会出现崩溃的问题。因此,我们需要在创建 Tab 的时候为每个 Tab 设置一个非空的内容。

这里有几种方法可以解决这个问题。一种方法是在 ViewPager 中设置 FragmentPagerAdapter 或者 FragmentStatePagerAdapter ,然后在 getItem() 方法中返回一个空的 Fragment。另一种方法是在 ViewPager 中设置 PagerAdapter 并重写 instantiateItem() 方法,在这个方法中返回一个空的 View。

这里有一个示例代码,展示了如何通过第一种方法解决这个问题:

-- -------------------- ---- -------
------ ----- -------------- ------- -------------------- -

    ------ ------------------------------ ---------------- -
        -----------------------
    -

    ---------
    ------ -------- ----------- --------- -
        ------ --- ----------------
    -

    ---------
    ------ --- ---------- -
        ------ --
    -

    ------- ----- ------------- ------- -------- -
        ---------
        ------ ---- --------------------------- --------- --------- ---------- ------ ------------------- -
            ------ --- -------------------
        -
    -
-

结论

在使用 CoordinatorLayout 和 TabLayout 的时候,一定要记得为每一个 Tab 设置一个非空的内容,否则会导致应用程序崩溃。我们希望这篇文章能够帮助到正在遇到这个问题的 Android 开发者。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672c114cddd3a70eb6d47383

纠错
反馈