Maîtriser Kotlin ~ Convertir un fichier Java en fichier Kotlin Road to Graduation ~ Partie 2

introduction

Lors de l'utilisation de Kotlin sur Android, etc., de nombreuses personnes effectuent une conversion automatique de Java avec "Convertir un fichier Java en fichier Kotlin". Cela fonctionne réellement, mais c'est un mémo pour aller plus loin et mieux utiliser Kotlin.

2ème fois Cette fois, vous apprendrez le traitement dynamique de la vue de l'activité Android. Version Kotlin: 1.3

Exemple de code avant la conversion Kotlin

Tout d'abord, préparez un échantillon écrit en Java. Le traitement est.

MainActivity.java


public class MainActivity extends AppCompatActivity {

    Button buttonA;
    TextView textViewA;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonA = (Button) findViewById(R.id.button_A);
        buttonA.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("", "buttonA");
            }
        });

        textViewA = (TextView) findViewById(R.id.text_viewA);
        textViewA.setText(R.string.text1);

        TextView textViewB = (TextView) findViewById(R.id.text_viewB);
        textViewB.setText(R.string.text2);
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        buttonA.setClickable(false);
        textViewA.setText(R.string.text2);
    }

Exemple de code après la conversion Kotlin

Si cela est automatiquement converti et mis en correspondance avec la forme d'origine, il ressemblera sûrement à ceci ...

MainActivity.kt


class MainActivity : AppCompatActivity() {

    var buttonA: Button? = null
    var textViewA: TextView? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        buttonA = findViewById<View>(R.id.button_A) as Button
        buttonA?.setOnClickListener { Log.d("", "buttonA") }

        textViewA = findViewById<View>(R.id.text_viewA) as TextView
        textViewA?.setText(R.string.text1)

        val textViewB = findViewById<View>(R.id.text_viewB) as TextView
        textViewB.setText(R.string.text2)
    }

    override fun onRestart() {
        super.onRestart()
        buttonA?.isClickable = false
        textViewA?.setText(R.string.text2)
    }
}

Qu'est-ce qui ne va pas

Pour le moment, cela peut fonctionner sans problème ... Tout d'abord, vous devez dérouler Nullable (buttonA? ....) chaque fois que vous utilisez une variable membre. findViewById comme ***** La description n'a pas non plus de sens.

Réfléchissez à la façon de mettre en œuvre

Il y a deux façons

  1. Utilisez "lateinit" comme variable membre pour déterminer le type de findViewById

MainActivity.kt


class MainActivity : AppCompatActivity() {

    lateinit var buttonA: Button
    lateinit var textViewA: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        buttonA = findViewById<Button>(R.id.button_A)
        buttonA.setOnClickListener { Log.d("", "buttonA") }

        textViewA = findViewById<TextView>(R.id.text_viewA)
        textViewA.setText(R.string.text1)

        val textViewB = findViewById<TextView>(R.id.text_viewB)
        textViewB.setText(R.string.text2)
    }

    override fun onRestart() {
        super.onRestart()
        buttonA.isClickable = false
        textViewA.setText(R.string.text2)
    }
}
  1. Utilisez "Extensions Kotlin Android" La méthode 1 convient, mais elle peut être mise en œuvre plus simplement. C'est "Extensions Android Kotlin (lien officiel)"

Il est nécessaire d'ajouter le chemin de classe à gradle pour utiliser

build.gradle


buildscript {
    ext.kotlin_version = '1.3.41'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        //Ajoutez la ligne suivante
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}

Prêt maintenant Peut être implémenté sans utiliser findViewById

MainActivity.kt


//* Il est nécessaire d'ajouter l'importation de ↓
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button_A.setOnClickListener { Log.d("", "buttonA") }

        text_viewA.text = getText(R.string.text1)
        
        text_viewB.text = getText(R.string.text2)
    }

    override fun onRestart() {
        super.onRestart()
        button_A.isClickable = false
        text_viewA.text = getText(R.string.text2)
    }
}

Très simple!

Recommended Posts

Maîtriser Kotlin ~ Convertir un fichier Java en fichier Kotlin Road to Graduation ~ Partie 3
Maîtriser Kotlin ~ Convertir un fichier Java en fichier Kotlin Road to Graduation ~ Partie 2
Maîtriser Kotlin ~ Convertir un fichier Java en fichier Kotlin Road to Graduation ~ Partie 1
[Android] Convertir le code Java Android en Kotlin
Convertir toutes les applications Android (Java) en Kotlin
Ingénieur en route vers Java Partie 1 Introduction et construction de l'environnement
<java> Lire le fichier Zip et le convertir directement en chaîne
Comment convertir un fichier en tableau d'octets en Java
Comment convertir la base Java
[Java] Convertir ArrayList en tableau
Road to Java Engineer Part2 Quel type de langage est Java?
Java pour apprendre avec les ramen [Partie 1]
En route vers l'acquisition de Java SE 11 Silver
Classe Kotlin à envoyer aux développeurs Java
Comment convertir un fichier erb en haml
Enregistrer la sortie dans un fichier en Java
[Java] Convertir 1 en N liste en carte
[Android] Convertissez Map en JSON à l'aide de GSON avec Kotlin et Java
La route de JavaScript à Java
[Java] Convertit un tableau en ArrayList * Attention
[Java] Comment utiliser la classe File
La voie de la création de services Web (partie 2)
Java SE8 Silver ~ La route à franchir ~
Convertir l'heure UTC Java en heure JST
[Java] Convertit null du type Object en type String
Convertir des fichiers SVG en fichiers PNG en Java
Fonctions de portée Kotlin à envoyer aux développeurs Java
Exemple pour décompresser le fichier gz en Java
Mémo pour la migration de Java vers Kotlin
<Java> Quiz pour convertir par lots les noms de fichiers séparés par une chaîne de caractères spécifique avec une partie du nom de fichier
Fonctions Kotlin et lambdas à envoyer aux développeurs Java
[Ruby] Comment convertir un fichier CSV en Yaml (Yml)
Présentation de Kotlin à un projet Java Maven existant
Migrer de Java vers Kotlin côté serveur + Spring-boot
Écrire dans un fichier en utilisant ShiftJIS ・ Lire un fichier (Kotlin / JVM)
[Java] Convertit le code DB en valeur de code à l'aide d'énum
Paramètres initiaux pour la réécriture de projets Java sur Kotlin
Comment convertir un contrat de solidité en une classe de contrat Java
Histoire d'essayer de faire fonctionner le fichier JAVA
Premiers pas avec Kotlin à envoyer aux développeurs Java
Ce que j'ai fait lorsque j'ai converti Java en Kotlin
Convertir les beans imbriqués Java au format aaa.bbb [0] .ccc
Où les programmeurs Java ont tendance à trébucher sur Kotlin
Comment écrire Java String # getBytes dans Kotlin?
Ce que des personnes inexpérimentées en Java ont fait pour étudier Kotlin
[Java] Convertir et importer des valeurs de fichier avec OpenCSV
La voie de la création d'un service Web (partie 1)