Android – Как запустить пользовательскую функцию DialogPreference из MainActivity?

Я хотел бы использовать 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" нет опции android:name=".SettingsActivity" – почему?

Ваш SettingsActivity расширяет DialogPreference . DialogPreference не распознается как активность и не может использоваться или определен в манифесте как активность, потому что это не подклассы класса Activity Вы можете использовать ActivityAppCompatActivityActionBarActivityFragmentActivity или любой подкласс Activity.class