Android Studio 首选项在创建设置时出现问题

Android Studio Preferences issue with creating settings

我目前正在尝试使用 kotlin 在 android studio 上实现设置功能。我正在引用这个 guide。我正在使用 mac 和外部 android 设备来 运行 应用程序

但是,我 运行 遇到了一个问题,我的应用程序 运行 成功(打开,应用程序的其他方面运行良好),但每当我尝试单击“设置”时崩溃选项。

以下是我的 MainActivity 中的函数 class

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        menuInflater.inflate(R.menu.menu_main, menu)
        return super.onCreateOptionsMenu(menu)
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        if (item.itemId == R.id.iSettings) {
            val intent = Intent(this, SettingsActivity::class.java)
            startActivity(intent)
        }
        return super.onOptionsItemSelected(item)
    }

下面是我的 SettingsActivity 的代码 class

class SettingsActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        supportFragmentManager
            .beginTransaction()
            .replace(android.R.id.content, MySettingsFragment())
            .commit()
        super.onCreate(savedInstanceState)
    }
}

下面是 MySettingsFragment 的代码class

class MySettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        setPreferencesFromResource(R.xml.preferences, rootKey)
    }
}

我的 xml settings/preferences 页面代码。目前充满了上述指南中的代码示例

<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

    <SwitchPreferenceCompat
        android:key="notifications"
        android:title="Enable message notifications"/>

    <Preference
        android:key="feedback"
        android:title="Send feedback"
        android:summary="Report technical issues or suggest new features"/>

</androidx.preference.PreferenceScreen>

另外,我的菜单xml代码

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/iSettings"
        android:orderInCategory="100"
        android:title="Settings"
        app:showAsAction="never"/>
</menu>

Dropdown menu at top right corner

Settings option which crashes the application

请帮忙!

看起来不错,但我们需要更多关于该问题的背景信息,例如您的 xml 设置如何。我会写一些笔记,这样您就可以确定您的应用中缺少什么。

  1. 首选项文件应位于 res/xml/preferences.xml
  2. 在您的设置Activity中,您应该有一个 FrameLayout,您可以在 .replace(android.R.id.content, MySettingsFragment()) 中设置一个 ID,而不是 android.R.id.content,您可以使用您的 ID。
  3. onCreateOptionsMenu 应该 return 一个 Boolean 并且您总是发送相同的 return super(..) 您应该将其更改为:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when(item.itemId){
        R.id.iSettings -> {
            val intent = Intent(this, SettingsActivity::class.java)
            startActivity(intent)
            true
        }
        else -> return super.onOptionsItemSelected(item)
    }
}
  1. 您是否在 manifest.xml 中声明了您的 Activity?
  2. 您应该将 SettingsActivitysetContentView 之后的片段替换为:
class SettingsActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager
                .beginTransaction()
                .replace(R.id.your_id, MySettingsFragment())
                .commit()
    }
}