gpt4 book ai didi

java - Android 应用程序在尝试打开 SettingsFragment 后崩溃

转载 作者:行者123 更新时间:2023-12-01 19:27:33 25 4
gpt4 key购买 nike

我正在尝试将 2015 年用 Java 编写的应用程序重写为 Kotlin,但发现了一个问题,即 getFramgentManager 已被弃用

Java 代码:

设置 Activity

import ...

public class SettingsActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Objects.requireNonNull(getActionBar()).setDisplayHomeAsUpEnabled(true);
// Display the fragment as the main content.
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();

}

}

设置 fragment

public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
Preference pref = findPreference(key);

if (pref instanceof ListPreference) {
ListPreference listPref = (ListPreference) pref;
pref.setSummary(listPref.getEntry());
}

}

}

Kotlin

class SettingsActivity : Activity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (actionBar != null) {
actionBar!!.setDisplayHomeAsUpEnabled(true)
}
// Display the fragment as the main content.


val fm : FragmentManager = FragmentActivity().supportFragmentManager
fm.beginTransaction()
.replace(android.R.id.content, SettingsFragment())
.commit()
}
}
class SettingsFragment : PreferenceFragmentCompat(), SharedPreferences.OnSharedPreferenceChangeListener {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.preferences)
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences)
}

override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
val pref = findPreference<Preference>(key)

if (pref is ListPreference) {
pref.setSummary(pref.entry)
}
}
}

它在字符串 .commit 上崩溃。我该怎么做才能修复它?我尝试了 StackOverflow 的很多指令,但没有任何效果我不能只做 FragmentManager().beginTransaction()
.replace(android.R.id.content,SettingsFragment())
.commit()
,因为 FragmentManager 是抽象类

最佳答案

我确信您一定遇到以下异常或类似异常。

  Caused by: java.lang.IllegalStateException: Activity has been destroyed

这意味着您不能从客户端创建 Activity 实例。

如果没有特殊要求,请从 AppCompatActivity() 开始延长您的 Activity 时间

我对你的代码做了一些重构。下面的代码应该可以工作。

class SettingsActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
actionBar?.setDisplayHomeAsUpEnabled(true)

supportFragmentManager.beginTransaction()
.replace(android.R.id.content, SettingsFragment()).commit()

}
}

关于java - Android 应用程序在尝试打开 SettingsFragment 后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59294755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com