Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 2

Einführung

Wenn Sie Kotlin unter Android usw. verwenden, gibt es viele Leute, die automatisch mit "Java-Datei in Kotlin-Datei konvertieren" von Java konvertieren. Es funktioniert tatsächlich, aber es ist ein Memo, um noch einen Schritt weiter zu gehen und Kotlin besser zu nutzen.

  1. Mal Dieses Mal lernen Sie die dynamische Verarbeitung von View of Android Activity. Kotlin-Version: 1.3

Beispielcode vor der Kotlin-Konvertierung

Bereiten Sie zunächst ein in Java geschriebenes Beispiel vor. Die Verarbeitung ist.

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);
    }

Beispielcode nach Kotlin-Konvertierung

Wenn dies automatisch konvertiert und an die ursprüngliche Form angepasst wird, wird es sicherlich so aussehen ...

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)
    }
}

Was ist los

Vorerst kann es ohne Probleme funktionieren ... Zuerst müssen Sie Nullable (buttonA? ....) jedes Mal auspacken, wenn Sie eine Mitgliedsvariable verwenden. findViewById als ***** Die Beschreibung ist auch bedeutungslos.

Überlegen Sie, wie Sie es implementieren möchten

Es gibt zwei Möglichkeiten

  1. Verwenden Sie "lateinit" als Mitgliedsvariable, um den Typ von findViewById zu bestimmen

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. Verwenden Sie "Kotlin Android Extensions" Methode 1 ist in Ordnung, kann aber einfacher implementiert werden. Das ist "Kotlin Android Extensions (offizieller Link)"

Es ist erforderlich, dem zu verwendenden Gradle einen Klassenpfad hinzuzufügen

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"
        //Fügen Sie die folgende Zeile hinzu
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}

Nun bereit Kann ohne Verwendung von findViewById implementiert werden

MainActivity.kt


//* Zusätzlicher Import von ↓ ist erforderlich
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)
    }
}

Sehr einfach!

Recommended Posts

Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 3
Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 2
Beherrschen von Kotlin ~ Konvertieren von Java-Dateien in Kotlin-Dateien Road to Graduation ~ Teil 1
[Android] Konvertieren Sie Android Java-Code in Kotlin
Konvertieren Sie alle Android-Apps (Java) in Kotlin
Road to Java Engineer Teil 1 Einführung & Umgebungskonstruktion
<java> Zip-Datei lesen und direkt in String konvertieren
So konvertieren Sie eine Datei in ein Byte-Array in Java
So konvertieren Sie Java Base
[Java] Konvertiert ArrayList in Array
Road to Java Engineer Part2 Was für eine Sprache ist Java?
Java mit Ramen lernen [Teil 1]
Straße nach Java SE 11 Silberakquisition
Kotlin-Klasse zum Senden an Java-Entwickler
So konvertieren Sie erb-Datei in haml
Protokollausgabe in Datei in Java
[Java] Konvertiere 1 in N Liste in Karte
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
Der Weg von JavaScript nach Java
[Java] Konvertieren Sie ein Array in ArrayList * Achtung
[Java] Verwendung der File-Klasse
Der Weg zum Erstellen eines Webdienstes (Teil 2)
Java SE8 Silber ~ Der Weg zum Pass ~
Konvertieren Sie von der Java-UTC-Zeit in die JST-Zeit
[Java] Konvertiert Null vom Objekttyp in String-Typ
Konvertieren Sie SVG-Dateien in Java in PNG-Dateien
Kotlin-Scope-Funktionen zum Senden an Java-Entwickler
Beispiel zum Entpacken einer gz-Datei in Java
Memo für die Migration von Java nach Kotlin
<Java> Quiz zum Batch-Konvertieren von Dateinamen, die durch eine bestimmte Zeichenfolge mit einem Teil des Dateinamens getrennt sind
Kotlin-Funktionen und Lambdas zum Senden an Java-Entwickler
[Ruby] So konvertieren Sie eine CSV-Datei in Yaml (Yml)
Einführung in Kotlin in ein bestehendes Java Maven-Projekt
Migrieren Sie von Java zu Server Side Kotlin + Spring-Boot
Mit ShiftJIS in Datei schreiben ・ Datei lesen (Kotlin / JVM)
[Java] Konvertieren Sie DB-Code mit enum in einen Codewert
Grundeinstellungen für das Umschreiben von Java-Projekten in Kotlin
So konvertieren Sie einen Soliditätsvertrag in eine Java-Vertragsklasse
Die Geschichte des Versuchs, JAVA File zu bedienen
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Was ich getan habe, als ich Java zu Kotlin konvertiert habe
Konvertieren Sie verschachtelte Java-Beans in das Format aaa.bbb [0] .ccc
Wo Java-Programmierer dazu neigen, über Kotlin zu stolpern
Wie schreibe ich Java String # getBytes in Kotlin?
Was Java-Unerfahrene getan haben, um Kotlin zu studieren
[Java] Konvertieren und Importieren von Dateiwerten mit OpenCSV
Der Weg zum Erstellen eines Webdienstes (Teil 1)