Android - 如何从MainActivity启动自定义DialogPreference?

时间:2017-12-30 23:35:49

标签: android kotlin settings preferences

我想使用DialogPreference作为我的设置菜单(应用程序屏幕右上方的三个点)。这是我目前的做法:

class SettingsActivity : DialogPreference{
    constructor(context : Context, attrs : AttributeSet) : super(context,attrs){
        isPersistent = false
    }
    override fun onBindDialogView(view: View?) {
        super.onBindDialogView(view)
        (context as Activity).fragmentManager.findFragmentById(R.xml.preferences)
    }
    override fun onDialogClosed(positiveResult: Boolean) {
        super.onDialogClosed(positiveResult)
    }
}

我现在真的很困惑,因为我读了一些关于如何创建这些设置菜单的教程。我的第一种方法是PreferenceActivity使用PreferenceFragment

class SettingsFragment : PreferenceFragment {
    constructor() : super()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        addPreferencesFromResource(R.xml.preferences)
    }
}

我不知道 - 在DialogPreference的情况下我是否也必须使用它?我的preferences.xml

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

    <com.test.view.DialogExPreference
        android:title="Title"
        android:dialogMessage="Dialog Message"
        android:negativeButtonText="test"/>
</PreferenceScreen>

我尝试像这样启动自定义DialogPreference:

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.action_settings -> {
            var i = Intent(this,SettingsActivity::class.java)
            startActivity(i)
            return true
        }
        else -> super.onOptionsItemSelected(item)
    }
}

但是我收到了这个错误:

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.standardbenutzer.integrate/com.example.standardbenutzer.integrate.SettingsActivity}; have you declared this activity in your AndroidManifest.xml?

但如果我尝试将其添加到我的AndroidManifest.xml - android:name=".SettingsActivity"没有可用选项 - 为什么会这样?

1 个答案:

答案 0 :(得分:1)

您的SettingsActivity扩展DialogPreferenceDialogPreference未被识别为活动,不能在清单中作为活动使用或定义,因为它不是Activity类的子类 您可以使用Activity - AppCompatActivity - ActionBarActivity - FragmentActivityActivity.class的任何子类