Общие настройки Android внутри фрагмента не работают - Kotlin - PullRequest
0 голосов
/ 18 февраля 2019

Я часами искал и пытался найти решение, но в духе.Итак, вот мой первый вопрос по stackoverflow.В течение многих лет я мог обходиться без необходимости задавать свои собственные вопросы из-за огромного количества тем.

Пожалуйста, будьте добры ко мне, если я что-то не так делаю.Я сделаю все возможное, чтобы лучше задавать вопросы.

Моя проблема в том, что он не будет хранить или считывать данные из предпочтений.Это говорит о том, что они не существуют.Я взял пример кода из Google для экрана настроек.Внутри много фрагментов.Внутри одного из этих фрагментов я ловлю щелчок предпочтения и хочу изменить с ним значение одного из других предпочтений.

После того, как вы найдете мой код.

Проблема, на мой взгляд, заключается вonPreferenceTreeClick элемента AlveolPreferencesFragment.

Спасибо за всю вашу помощь и всю помощь, которую вы мне оказали, прежде чем не знали, что сделали:))

Alveol_Preferences XML

<androidx.preference.PreferenceScreen
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <PreferenceCategory
        app:title="@string/heart_alveol">

        <EditTextPreference
            app:key="latitude"
            app:dialogTitle="@string/latitude_summary"
            app:useSimpleSummaryProvider="true"
            app:title="@string/latitude"
            app:defaultValue="-34.0"/>

        <EditTextPreference
            app:key="longitude"
            app:dialogTitle="@string/longitude_summary"
            app:useSimpleSummaryProvider="true"
            app:title="@string/longitude"
            app:defaultValue="151.0"/>

        <Preference
            app:key="gpsheart"
            app:title="@string/gpsheart"
            app:summary="@string/gpsheart_summary"/>
    </PreferenceCategory>

</androidx.preference.PreferenceScreen>

Класс AlveolPreferencesFragment

class AlveolPreferencesFragment : PreferenceFragmentCompat() {



        override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {


            setPreferencesFromResource(R.xml.alveol_preferences, rootKey)
        }
        override fun onPreferenceTreeClick(preference: Preference): Boolean {

            return when (preference.key) {
                "gpsheart" -> {

                    var sharedPref : SharedPreferences? = activity?.getPreferences(Context.MODE_PRIVATE)
                    val editor = sharedPref?.edit()
                    editor?.putString("latitude", "Test").apply()


                    val text = sharedPref?.getString("longitude","Longitude doesn't exist")
                    val duration = Toast.LENGTH_SHORT

                    val toast = Toast.makeText(context, text, duration)
                    toast.show()



                    true
                }
                else -> {
                    super.onPreferenceTreeClick(preference)
                }
            }

        }

Класс AlveolPreferencesFragment находится внутри этого class SettingsActivity : AppCompatActivity()

Это было предварительно настроено Google, и у меня есть предположение, что этоэто довольно сложно.Но я не знаю, может быть, я ошибаюсь.

Дополнительный вопрос

Этот вопрос стоит первым, если вы хотите помочь мне здесь.Внутри OnPreferenceTreeClick я хочу получить последнее известное местоположение.Это уже работает из моего кода.Единственная проблема в том, что я не могу поместить fusedLocationClient в класс.Это не сработает там.

Потому что внутри этого вызова:

 fusedLocationClient = LocationServices.getFusedLocationProviderClient(activity)

активность возвращает FragmentActivity? Но для этого требуется активность.

Так как я могу получить настройки SettingsActivity внутри этой FragmentActivity?

Может быть, что-то с companion object?Понятия не имею.

Спасибо за помощь.

1 Ответ

0 голосов
/ 24 февраля 2019

После нескольких дней поиска я наконец нашел ответ сам.Я опубликую это здесь, если у кого-то есть такая же проблема.

В Германии у нас есть поговорка "Der Teufel steckt im Detail";) Что примерно переводится как "Дьявол кроется в деталях"

Вместо вызова этой функции:

var sharedPref : SharedPreferences? = Activity?.getPreferences(Context.MODE_PRIVATE)

Нам нужно вызвать эту функцию

val sharedPref = PreferenceManager.getDefaultSharedPreferences(context)

Тогда все остальное работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...