Как определить несколько sharedPreferences? - PullRequest
0 голосов
/ 10 января 2019

Мне удалось получить сохраненные значения sharedPreferences. Но я не знаю, как заставить его ссылаться на текст, на который я нажимаю. В разделе // Close Alert Window, когда я нажимаю кнопку ОК, чтобы изменить текст. ОК, закрывает диалоговое окно с предупреждением, а затем предположит добавить новую цену в список в sharedPreferences.

В putString(), если я использую putString("Price$it", input.text.toString()).apply, похоже, он ничего не делает. Однако, если я использую "Price1" любой текст, который я изменяю, сохраняется, и при повторном открытии приложение Price1 меняется на новую цену. Так что я знаю, что метод работает. я просто понятия не имею, как сохранить определенный текст, который я редактирую. Я надеюсь это имеет смысл. Спасибо за ваше время.

// Created Private Price List
    val sharedPreferences = getSharedPreferences("priceList", Context.MODE_PRIVATE)

//Price
    (1..912).forEach {
        val id = resources.getIdentifier("Price$it", "id", packageName)
        val tv = findViewById<TextView>(id)
        tv.text = sharedPreferences.getString("Price$it","0.00")

    }

(1..912).forEach {
        val id = resources.getIdentifier("Price$it", "id", packageName)
        val tv = findViewById<TextView>(id)
        tv.setOnLongClickListener {

            //Alert Window
            val alertDialog = AlertDialog.Builder(this@MainActivity).create()
            alertDialog.setTitle("NEW PRICE")
            val input = EditText(this@MainActivity)
            //Alert Submit on Enter
            input.setOnKeyListener { v, keyCode, event ->
                if (event.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
                    // Input changes text
                    tv.text = input.text
                    when {
                        tv.text.startsWith("-") -> tv.setTextColor(Color.RED)
                        tv.text.startsWith("+") -> tv.setTextColor(Color.GREEN)
                    else -> {
                        tv.text = "_"
                        tv.setTextColor(Color.DKGRAY)
                    }
                    }
                    // Close Alert Window
                    alertDialog.dismiss()
                    // TODO Save Price Table  //THIS PART vvv
                    sharedPreferences.edit().putString("Price1", input.text.toString()).apply()
                }
                false
            }


            val lp = LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT
            )
            input.layoutParams = lp
            alertDialog.setView(input)
            alertDialog.show()
            return@setOnLongClickListener true

        }
    }

1 Ответ

0 голосов
/ 10 января 2019

Вы следите за it. В вашей области вы ссылаетесь на аргумент tv.setOnLongClickListener. Укажите имя аргумента, чтобы его не скрывали внутренние лямбды.

(1..912).forEach { index ->
    ...
    sharedPreferences.edit().putString("Price$index", input.text.toString()).apply()
}    
...