如何解决Android Studio 首选项与创建设置有关
我目前正在尝试使用 kotlin 在 android studio 上实现设置功能。我指的是这个 guide。我正在使用 mac 和外部 android 设备来运行应用程序
但是,我遇到了一个问题,我的应用程序成功运行(打开,应用程序的其他方面运行良好),但每当我尝试单击“设置”选项时就会崩溃。
以下是我的 MainActivity 类中的函数
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 SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
supportFragmentManager
.beginTransaction()
.replace(android.R.id.content,MySettingsFragment())
.commit()
super.onCreate(savedInstanceState)
}
}
下面是 MySettingsFragment 类的代码
class MySettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?,rootKey: String?) {
setPreferencesFromresource(R.xml.preferences,rootKey)
}
}
我的设置/首选项页面的 xml 代码。当前充满了上面指南中的代码示例
<?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 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
- 在您的 SettingsActivity 中,您应该有一个带有 ID 的
FrameLayout
,您可以在您的.replace(android.R.id.content,MySettingsFragment())
中设置该 ID,而不是使用您的android.R.id.content
。 -
onCreateOptionsMenu
应该返回一个Boolean
并且您总是发送相同的返回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
中声明了您的活动? - 您应该将
setContentView
中SettingsActivity
之后的片段替换为:
class SettingsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
supportFragmentManager
.beginTransaction()
.replace(R.id.your_id,MySettingsFragment())
.commit()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。