Android - 视图在不应该的时候不可见(旧设备)

Android - views are invisible when they shouldn't be (old devices)

我正在 phone Android API 级别 21 的正常 phone 上测试和开发应用程序。每个视图都按应有的方式工作,没有问题。

但是,当切换到具有 API16 的旧设备时,片段的某些特定视图是不可见的。当离开片段并返回同一个片段时,它会显示。

例如,我打开应用程序并创建了开始片段。图像按钮被加载并显示,应该出现在它们下面的文本保持隐藏。 <-- 不知道为什么

离开该片段并返回后,按钮下方的文本会出现。

许多其他片段都会发生这种情况,我不知道这实际上是如何发生的,它也不一致..

这是我讲的具体部分:

<LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:id="@+id/dashboard_shortcut_timetable"
        android:paddingBottom="10dp"
        android:layout_weight="0.3">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/dashboard_shortcut_1"
                android:src="@drawable/ic_shortcut"
                android:background="@color/bg_white"
                android:layout_centerHorizontal="true"/>
        </RelativeLayout>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/dashboard_shortcut_timetable"
            android:id="@+id/dashboard_shortcut_textview_1"
            android:gravity="center|bottom"/>

外观的基本表示:

我只是在设置文本,基本的 Android 东西..

TextView dashboardShortCutTextview1 = (TextView) view.findViewById(R.id.dashboard_shortcut_textview_1);
dashboardShortCutTextview1.setText(title1);

所以其他视图以及一些菜单项也会发生这种情况,我必须稍后设置 invisible/visible 才能使其正常工作。

我的问题是;为什么会发生这种情况,如何解决,是否取决于设备或 API 级别?

对于遇到同样问题的任何人,我找到了解决问题的方法;

显然必须启用 multidex,因为我已经习惯了很多 methods/libraries。太糟糕了 logcat 没有给我任何迹象表明这正在发生并且这是导致问题的原因。

这是什么 multidex? Read here

如何启用 multidex 支持?

build.gradle

android {
    ...
    defaultConfig {
        ...
        multiDexEnabled true
    }
}

dependencies {
    ...
    compile 'com.android.support:multidex:1.0.1'
    ...
}

为了向后兼容,请在您的主应用程序中添加:

@Override
protected void attachBaseContext(Context base)
{
    super.attachBaseContext(base);
    MultiDex.install(this);
}