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
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);
}
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)
}
}
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.
Il y a deux façons
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)
}
}
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