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 设置如何。我会写一些笔记,这样您就可以确定您的应用中缺少什么。
- 首选项文件应位于
res/xml/preferences.xml
- 在您的设置Activity中,您应该有一个
FrameLayout
,您可以在 .replace(android.R.id.content, MySettingsFragment())
中设置一个 ID,而不是 android.R.id.content
,您可以使用您的 ID。
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)
}
}
- 您是否在
manifest.xml
中声明了您的 Activity?
- 您应该将
SettingsActivity
中 setContentView
之后的片段替换为:
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportFragmentManager
.beginTransaction()
.replace(R.id.your_id, MySettingsFragment())
.commit()
}
}
我目前正在尝试使用 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 设置如何。我会写一些笔记,这样您就可以确定您的应用中缺少什么。
- 首选项文件应位于
res/xml/preferences.xml
- 在您的设置Activity中,您应该有一个
FrameLayout
,您可以在.replace(android.R.id.content, MySettingsFragment())
中设置一个 ID,而不是android.R.id.content
,您可以使用您的 ID。 onCreateOptionsMenu
应该 return 一个Boolean
并且您总是发送相同的 returnsuper(..)
您应该将其更改为:
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)
}
}
- 您是否在
manifest.xml
中声明了您的 Activity? - 您应该将
SettingsActivity
中setContentView
之后的片段替换为:
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportFragmentManager
.beginTransaction()
.replace(R.id.your_id, MySettingsFragment())
.commit()
}
}