Android : Pas possible d'appeler l'id fullTextView dans MainActivity.kt

Bonjour,

Ma question en lien avec cette formation gratuite :

Je suis bloqué à la vidéo suivante :
2.7- Modifier les objets graphiques en Kotlin (2 mn 23)

Quand j’ajoute fullTextView dans

fun addButtonTouched(button: View) {
    fullTextView
}

après bien l’avoir défini dans activity_main.xml :

    <TextView
    android:layout_width="356dp"
    android:layout_height="437dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" app:layout_constraintHorizontal_bias="0.466"
    app:layout_constraintVertical_bias="0.944" android:id="@+id/fullTextView"/>

Le texte reste en rouge et l’import suivant de ne s’ajoute pas :
import kotlinx.android.synthetic.main.activity_main.*

D’ailleurs, si je l’ajoute manuellement, « kotlinx » apparaît en rouge.

Je n’y connais rien à Kotlin, j’ai juste téléchargé la dernière version d’Android Studio (4.1).
Je suis sur Mac OS.

J’ai créé un projet Android Studio comme ceci :
Empty Activity
Language : Kotlin
Minimum SDK : API 21 : Android 5.0 (Lollipop)
Je n’ai pas coché la seule case qu’on me propose à la fin « Use legacy android.support libraries »

Le 1er import n’est pas le même que dans la vidéo :
import androidx.appcompat.app.AppCompatActivity

J’ai l’impression que pour appeler des id issus des éléments XML, dans Android Studio 4.1, il faut utiliser une autre syntaxe : findViewById
https://developer.android.com/reference/kotlin/android/widget/TextView

final TextView helloTextView = (TextView) findViewById(R.id.text_view_id);

Un peu d’aide pour me débloquer sur Android Studio 4.1 serait super. La formation de Maxime est basée sur Android Studio 3.3 et 3.2

Maxime indique ceci sur Tuto :

« Le findViewById est une ancienne fonction provenant du SDK en Java et qui n’est plus nécessaire avec Kotlin. »

Si quelqu’un peut m’aider, ça me permettrait d’avancer plus en confiance pour la suite des formations de Maxime.

En attendant votre aide, je vais me faire la main sur les tutos android basics de kotlin

Peut-être y trouvais-je une solution.
Un autre élément qui diffère des écrans de Maxime, mon rendu d’app est en violet et pas en vert.

Merci d’avance pour votre aide,

Jeanviet

PS : j’ai mis moins de liens et images que prévu suite à ce message d’erreur du forum :
Désolé, les nouveaux utilisateurs ne peuvent ajouter qu’une image dans un message.
Désolé, les nouveaux utilisateurs ne peuvent insérer que 2 liens par message.

=> Désolé, de ne pas partager plus d’éléments de debug avec vous.

Bonjour Jean,

il semble que les extensions de kotlin pour Android ne soient plus ajoutées par défaut sur les nouveaux projets et la doc officielle mentionne à nouveau les findViewById qu’ils ne recommandaient plus. Je ne vois pourtant pas d’annonce officielle dans ce sens…les joies de la doc Android.

Pour corriger ton soucis, il te suffit de rajouter le plugin qui n’est plus par défaut dans la création de nouveaux projets.
Dans le fichier build.gradle de ton app (pas celui du projet), tu devrais trouver une section tout en haut du fichier avec marqué :

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

Il te suffit d’ajouter une ligne pour le plugin des extensions kotlin pour Android :

plugins {
    id 'com.android.application'
    id 'kotlin-android'
    id 'kotlin-android-extensions'
}

Puis enregistre ce fichier et clique sur le bouton « Sync now » qui a du s’afficher en haut du fichier après que tu l’aies modifié.

5 J'aime

C’est miraculeux, ça solutionne complètement mon blocage. Merci Maxime d’avoir pris le temps de m’aider. Je retourne à ta formation :wink:

1 J'aime

Merci Maxime!
Jen profite, j’ai eu le même probleme, j’avais fait un post aussi pour ça mais moi c’était sur les bouton, je voulais savoir si il était plus sur de déclarer un button avant de l’utiliser ou tout simplement taper l’id ?

Personnellement je préfère le déclarer au départ car le findViewById doit rechercher la vue en question et si tu dois cliquer plusieurs fois sur le bouton, ça t’évite de le rechercher plusieurs fois.

1 J'aime

Je vais faire pareil que mon mentor alors

1 J'aime

Gloups !

Excuses-moi d’avance, je viens de t’envoyer un mail à ce sujet ^^’… Ca m’apprendra à ne pas checker le forum au moindre soucis :stuck_out_tongue:

Merci à Jeanviet d’avoir posé la question et à toi Maxime pour la solution !

[EDIT] : Par contre de mon coté après avoir relancé Android Studio et lancé le build sur l’émulateur, il me dit de migrer vers Jetpack View Binding…

[EDIT2] : En attendant ton retour, je continue le cours avec un findViewById que j’ai un peu galéré à mettre en place, Google m’a filé un coup d’main ^^

purple

Bonjour
j’ai eu le même souci (fullTextView), désormais résolu, mais une erreur subsiste, lorsque je fais fullTextView.text =« Bazinga », j’ai 3 erreurs une expecting ‹ " › et 2 expecting a top level déclaration . Je suis complètement novice sur Android Studio et le peu d infos trouvées sur stackoverflow ou autres sont incompréhensibles pour moi.

Salut Benoit06 !

Je suis débutant également mais personnellement je penserai à une erreur de syntaxe :slight_smile:

Si tu peux nous montrer ton code peut-être que quelqu’un pourra t’aider

[ PS ] : @mbritto J’ai toujours le problème du findViewById sur le cours complet Kotlin, je ne comprends pas le principe de migration et pourquoi Android Studio m’oblige à le faire si tu as une idée je suis preneur

Salut
après un we de repos, j’ai eu 2 MAJ de plugins ce matin sur android studio, et la tout fonctionne

2 J'aime

Salut @madsky, j’avoue que je n’ai pas fait de Kotlin ni de SDK natif depuis longtemps mais peut être que je peux t’aider à trouver la solution.
L’idéal serait que tu crées un post dédié à ce problème pour que je puisse comprendre exactement ce que c’est

2 J'aime

salut @Madsky

au faites il faudra faire la mise à jour de build.gradle app en ajoutant une ligne comme suit :

plugins {
id ‹ com.android.application ›
id ‹ kotlin-android ›
id ‹ kotlin-android-extensions ›
}

Sault @ghosthio !

Je te remercies pour ta réponse :slight_smile: Malheureusement j’ai essayé et le problème est toujours là voilà où j’en suis actuellement :

Android Studio voudrait que je fasse la migration vers ViewBinding mais ça m’a l’air compliqué pour mon niveau, et surtout bien plus fastidieux qu’avec le plugin kotlin-android-extensions

Du coup pour le moment effectivement je continues comme ça on verra par la suite si je trouve une autre méthode, j’ai toujours ce warning à chaque build mais je commence à m’y faire :laughing: Tant que ça ne pose pas de problème de performances ou de stabilité c’est très bien comme ça :slight_smile: