【问题标题】:Why does AndroidFragment results in Unable to instantiate fragment error?为什么AndroidFragment会导致无法实例化片段错误?
【发布时间】:2021-06-05 14:18:14
【问题描述】:

我有一个设置活动,它有一个片段,其类被实现为静态内部类。

设置活动类如下所示

public class SettingsActivity extends AppCompatActivity implements
            PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {...

    public static class HeadingsFragment extends PreferenceFragmentCompat {
         @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {...}
    ...
    }
} 

并且这个类在xml中是这样引用的

<Preference app:fragment="myapp.SettingsActivity$HeadingsFragment" ... />

然后我尝试在模拟器中进行测试,它运行良好。但在真机测试时出现以下错误。

androidx.fragment.app.Fragment$e:无法实例化片段 myapp.SettingsActivity$HeadingsFragment:确保类名存在

尝试捕获机器人脚本并在 Firebase 中使用多个不同的设备进行测试,但仍然出现错误。

请注意,我能够成功捕获机器人脚本只是因为它在模拟器上运行。

什么可能导致这个问题?

更新:

  1. 尝试将类设为独立的公共类(而不是 静态内部类),但仍然出现错误。
  2. 分析了生成的 APK,并且在这两种情况下类都存在于 classes2.dex 中

【问题讨论】:

    标签: android firebase android-fragments androidx


    【解决方案1】:

    我尝试了here提供的解决方案

    基本上它被proguard-rules搞砸了。将这些行添加到 proguard-rules.pro 文件解决了问题

    -keep public class * extends androidx.preference.Preference
    -keep public class * extends androidx.preference.PreferenceFragmentCompat
    

    【讨论】:

      猜你喜欢
      • 2010-09-09
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多