Le code suivant fonctionne mais j'ai l'impression qu'il existe probablement un moyen plus efficace / plus propre. Je suis nouveau sur Kotlin et Android Development, alors allez-y doucement avec moi. ;-) Toute amélioration serait très appréciée car je cherche toujours à m'améliorer.

fun updateBackgroundColor() {

    val sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
    // Gets the text color from the shared preferences file
    val backgroundColor = sharedPref.getString("background_color", "")
    val fullscreenView = findViewById(R.id.fullscreen_content)
    val fullView = fullscreenView as TextView?

    // Changes the text color based on the color the user has selected in Settings/Preferences
    if (backgroundColor == "blue") {
        fullView!!.setBackgroundColor(ContextCompat.getColor(this, mBlue))

    } else if (backgroundColor == "red") {
        fullView!!.setBackgroundColor(ContextCompat.getColor(this, mRed))

    } else if (backgroundColor == "green") {
        fullView!!.setBackgroundColor(ContextCompat.getColor(this, mGreen))

    } else if (backgroundColor == "yellow") {
        fullView!!.setBackgroundColor(ContextCompat.getColor(this, mYellow))

    } else if (backgroundColor == "purple") {
        fullView!!.setBackgroundColor(ContextCompat.getColor(this, mPurple))

    } else if (backgroundColor == "pink") {
        fullView!!.setBackgroundColor(ContextCompat.getColor(this, mPink))

    } else if (backgroundColor == "black") {
        fullView!!.setBackgroundColor(ContextCompat.getColor(this, mBlack))

    } else if (backgroundColor == "white") {
        fullView!!.setBackgroundColor(ContextCompat.getColor(this, mWhite))

    } else {
        fullView!!.setBackgroundColor(ContextCompat.getColor(this, mBlue))


    }

}
2
Dallas 1 août 2017 à 21:31

2 réponses

Meilleure réponse

Plutôt que d'enregistrer une chaîne avec la couleur, enregistrez la valeur hexadécimale de la couleur. Ensuite, vous pouvez éviter la déclaration massive if / else.

fun updateBackgroundColor() {
    val sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
    // Gets the text color from the shared preferences file
    val backgroundColor = sharedPref.getString("background_color_hex", "0x000000")
    val fullView = findViewById(R.id.fullscreen_content) as TextView?

    // Changes the text color based on the color the user has selected in Settings/Preferences
    int color = Color.parseColor(backgroundColor);
    fullView?.setBackgroundColor(color)
}

En outre, vous pouvez faire le findViewById comme un oneliner, comme indiqué ci-dessus.
En utilisant '!!' dans Kotlin est EXTRÊMEMENT mauvais, car il dit essentiellement "je sais que cela peut être nul, et je m'en fiche, plantez simplement si c'est nul", ce qui est l'un des principaux points de l'utilisation de Kotlin. Vous devriez donc utiliser '?' comme indiqué ci-dessus à la place, car il exécutera le code s'il n'est pas nul, et s'il est nul, il n'exécutera pas le code (ce qui signifie qu'il ne plantera pas)

2
Moonbloom 1 août 2017 à 18:39

Vous pouvez créer un map comme celui-ci:

var map = mapOf("blue" to mBlue, "red" to mRed, "green" to mGreen, ...)
fullView!!.setBackgroundColor(ContextCompat.getColor(this, map[backgroundColor]))
0
Looki 2 août 2017 à 13:16