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.
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);
}
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)
}
}
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.
Es gibt zwei Möglichkeiten
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)
}
}
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