每当我进入设置活动并旋转设备时,我都会收到此错误消息“找不到片段构造函数”。下面是我的设置活动onCreate()方法和设置片段类。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
setContentView(R.layout.settings_activity);
if (savedInstanceState == null) {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.settings, new SettingsFragment(this))
.commit();
}
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
public static class SettingsFragment extends PreferenceFragmentCompat {
WeakReference<SettingsActivity> activityWeakReference;
SettingsFragment(SettingsActivity activity) {
activityWeakReference = new WeakReference<>(activity);
}
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
ListPreference listPreference = findPreference("jojojojo");
if (listPreference != null) {
listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
activityWeakReference.get().setResult(1);
return true;
}
});
}
SwitchPreferenceCompat switchPreferenceCompat = findPreference("lalalala");
if (switchPreferenceCompat != null) {
switchPreferenceCompat.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if ((boolean)newValue) {
activityWeakReference.get().mostrarMensaje(getString(R.string.toastFrasesOn));
activityWeakReference.get().setResult(2);
} else {
activityWeakReference.get().setResult(3);
}
return true;
}
});
}
}
}
我想这里的问题是片段没有默认构造函数。创建参数化构造函数隐藏了默认构造函数。也不建议创建参数化构造函数。
Fragment的所有子类都必须包含一个公共的无参数构造函数。框架通常会在需要时重新实例化片段类,特别是在状态恢复期间,并且需要能够找到此构造函数来实例化它。如果无参数构造函数不可用,则在某些情况下,在状态还原期间会发生运行时异常。参数可以由调用方使用setArguments(Bundle)提供,然后由带有getArguments()的片段检索。
解决问题
>
在Setting sFrament
中删除当前参数化的构造函数
添加一个无参数构造函数,如下所示:
公共设置片段(){}
将活动引用传递给片段也不是一个好主意。ViewModel的使用是在活动和片段之间进行通信的一种更新的替代方法,从而允许片段可以有一个空的构造函数。
我在一些设备上面临这个问题,并在崩溃分析中出错。很多用户设备都面临这个问题,但在我的设备上运行良好。 无法启动活动ComponentInfo{com.ox.outloks.new/com.ox.outloks.new.activities.maindraweractivity}:Android.support.v4.app.fragment$instantiationexception:无法实例化
当创建一个流行的片段时,我得到一个空的构造函数错误。 请看看我写的代码,创建碎片时如何传递数据?
我试图调用一个片段,但有时会收到以下错误,即使我的片段中有空构造函数 作为
我在一些设备上遇到了这个问题,并且在我的崩溃分析中出现了一个错误。当应用程序遇到ANR故障并且错误为 无法启动activity ComponentInfo{com.qwykr.dryver.base/com.qwykr.dryver.base.activities.MainActivity}:Android.support.v4.app.fragment$InstantiationExceptio
我有以下错误。我在DailyVerseFrament上添加了构造函数。但它仍然不起作用。我有这个问题超过一个星期了。
问题内容: 我的MyBatis映射有问题。我有一个像这样的领域类: 一个映射器类,具有如下方法: 在数据库中,三列的类型分别为Number,Timestamp和Clob,并且名称与类字段中的名称相同。 当我使用此方法时,我得到一个: ExecutorException:在[MyClass;中找不到构造函数。 匹配[java.math.BigDecimal,java.sql.Timestamp,or