Je suis nouveau dans Kotlin . J'ai une vue que je dois afficher ou masquer de manière conditionnelle.
Comment puis-je faire cela à Kotlin?
En Java:
public void showHide(View view){
if (view.getVisibility() == View.VISIBLE) {
view.setVisibility(View.INVISIBLE);
} else {
view.setVisibility(View.VISIBLE);
}
}
En réponse à cette réponse, je pense qu'une méthode à la Kotlin pour accomplir cela peut également être écrite ainsi:
fun showHide(view:View) {
view.visibility = if (view.visibility == View.VISIBLE){
View.INVISIBLE
} else{
View.VISIBLE
}
}
Vous pouvez le faire dans une fonction extension :
fun View.toggleVisibility() {
if (visibility == View.VISIBLE) {
visibility = View.INVISIBLE
} else {
visibility = View.VISIBLE
}
}
Peut être utilisé comme ceci:
someView.toggleVisibility()
Vous pouvez convertir à l'aide d'Android Studio: Cliquez sur le fichier Java que vous souhaitez convertir, choisissez Code -> Convertir un fichier Java en fichier Kotlin et observez la magie .
fun showHide(view: View) {
if (view.visibility == View.VISIBLE) {
view.visibility = View.INVISIBLE
} else {
view.visibility = View.VISIBLE
}
}
Voici comment je gère la visibilité de la vue dans Kotlin. Ces méthodes peuvent être appelées sur n'importe quelle sous-classe de la classe View
. Par exemple. LinearLayout
, TextView
etc.
VISIBLE/GONE:
// @BindingAdapter("visibleOrGone")
fun View.visibleOrGone(visible: Boolean) {
visibility = if(visible) View.VISIBLE else View.GONE
}
VISIBLE/INVISIBLE:
// @BindingAdapter("visibleOrInvisible")
fun View.visibleOrInvisible(visible: Boolean) {
visibility = if(visible) View.VISIBLE else View.INVISIBLE
}
Liaison de données: Retirez le commentaire @BindingAdapter
si vous souhaitez également utiliser les méthodes ci-dessus avec databinding.
<FrameLayout
app:visibleOrGone="@{viewModel.visibleView}"
...
/>
ou
<EditText
app:visibleOrInvisible="@{viewModel.visibleView}"
...
/>
Ma classe ViewModel
ressemble à ceci:
class LoginViewModel {
val visibleView = ObservableBoolean()
}
Vous pouvez utiliser le code ci-dessous:
fun View.isVisible(): Boolean {
return visibility == View.VISIBLE
}
Et:
fun View.setVisible(visible: Boolean) {
visibility = if (visible) {
View.VISIBLE
} else {
View.GONE
}
}
Et vous pouvez utiliser:
if (text_view.isVisible()) {
text_view.setVisible(false)
}