J'ai besoin de savoir comment appeler une barre de progression (ou tout autre type de bouton) dans une classe, en dehors de la méthode "Oncreate".
J'ai vu en Java, je peux le faire appeler FindviewyId (), mais il a été débarrassé à Kotlin.
Par exemple, j'essayais une chose comme ceci: mais cela me donne la référence non résolue de la méthode de la vue de la vue. P> Merci d'avance pour l'aide P> ______________ Mise à jour ________________ P> Voici ma classe personnalisée de téléchargement P> <application
android:hardwareAccelerated="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name="com.journeyapps.barcodescanner.CaptureActivity"
android:screenOrientation="fullSensor"
tools:replace="screenOrientation" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
//ATTENTION
<activity android:name="com.example.myapplication.DownloadSoundController"/>
// here it returns ERROR, on default constructor
<receiver android:name=".DownloadBroadcastManager">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
</intent-filter>
</receiver>
</application>
3 Réponses :
Premièrement, cela fonctionne de la même manière à Kotlin. P>
Mais il y a une meilleure façon de kotlin: p>
Ajoutez la ligne suivante à vos applications Build.Gradle:
Maintenant, vous pouvez accéder à la vue par son identifiant: p>
E.g. Plus: https://kotlinlang.org/docs/tatudials/android-plugin .html p> Appliquer Plugin: 'Kotlin-Android-Extensions' Code> P>
myProgressBar.progress = 30 code> p>
ajoutez la ligne suivante à la construction.Gradle: Ceci peut également être effectué en dehors de Oncreate. < / p> p> Appliquer plugin: 'Kotlin-android-extensions code>
Oui, cela fonctionne dans toutes les fonctions dans mon MAINACIVITY.KT ... Cependant, cela ne fonctionne pas dans mon fichier "CustomClass.kt"
CustomClass étend-t-il l'activité? Dis-il Classe CustomClass: Activité () B>? Il doit B> étendre l'activité pour que cela fonctionne.
En fait, ça ne le fait pas. J'ai créé une classe personnalisée pour gérer le téléchargement de téléchargement. À l'intérieur, j'ai créé un fil pour garder une trace du% de téléchargement et mon objectif est d'envoyer ces valeurs à ma barre de progression
Je viens d'ajouter un constructeur avec: Activité () (comme vous l'avez suggéré) et comment ça fonctionne
Ok, il semble que mon application se bloque maintenant ... je pense qu'il doit y avoir peut-être des problèmes différents à l'intérieur merci beaucoup
L'erreur est la suivante: processus: com.example.myapplication, PID: 20468 java.lang.nullPointereException: tentative d'invoquer la méthode virtuelle 'Android.View.View android.view.window.findviewByID (int)' sur une référence d'objet null
FOETVIEDBYID CODE> renvoie désormais un type générique qui s'étend sur
afficher code> ( DOCS) .
val progressBar = findViewById<ProgressBar>(R.id.myProgressBar)
Il semble que cela empêche de giller une marque comme "non résolue". J'ai essayé et je peux appeler la barre de progression dans toutes les fonctions de l'activité principale, mais j'en ai besoin dans un autre fichier de classe.kt.
@Michelerava Êtes-vous sûr que vous utilisez la version SDK correcte?
J'ai ajouté le constructeur: Activité (). Maintenant, cela peut voir la barre myProgress, car elle se produit dans la MainAlactivité.kt ... Cependant, il provoque un crash avec cette erreur maintenant: processus: com.example.myapplication, PID: 20468 java.lang.nullPointereException: tentative d'invoquer la méthode virtuelle ' android.view.view android.view.window.findview (int) 'sur une référence objet nulle
@Michelerava L'activité est entièrement construite uniquement après avoir appelé SetContentView Inside Oncreate. Vous ne pouvez pas utiliser FOETVIEDBYID avant cela
My DownloadManager Custom Classe Exécutez plus tard ... en théorie. Il semble que, au lieu de cela, lorsque j'active le téléchargement, l'activité n'a pas été entièrement construite ... Comment puis-je faire pour le faire correctement?
@Michelerava Peut-être publier plus de code, car je ne peux pas deviner.
J'ai mis à jour la question ... Cependant, il ne s'écrase pas (j'ai résolu une erreur que je n'ai pas vu avant ...) et la barre de progression ne reçoit aucune mise à jour: / Merci de l'aide, je pense que je dois étudier un peu plus mon code
@Michelerava Utilisez LocalBroadCastraCeiver pour envoyer votre pourcentage de téléchargement à votre activité ou à votre fragment et à mettre à jour la barre de progression selon elle.
Merci à tout, j'ai résolu simplement l'envoi de la barre de progression comme un VaR dans la classe du téléchargeur. Je vais le poster dès que je peux. J'espère que ce n'est pas une "façon de gaspiller des ressources", car je ne suis pas encore sûr des threads Stoppyptig (est-ce juste que Kotlin le fait de lui-même?)
Je ne pense pas que Kotlin n'a pas accès à FitViewyid. Peut-être que vous faites quelque chose de mal.
J'ai mis à jour à nouveau ... c'est vraiment "bizarre"