0
votes

Comment obtenir une barre de progression (ou un bouton ...) en classe d'Android à travers Koltin?

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: xxx pré>

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>


2 commentaires

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"


3 Réponses :


0
votes

Premièrement, cela fonctionne de la même manière à Kotlin.

Mais il y a une meilleure façon de kotlin:

Ajoutez la ligne suivante à vos applications Build.Gradle: Appliquer Plugin: 'Kotlin-Android-Extensions'

Maintenant, vous pouvez accéder à la vue par son identifiant:

E.g. myProgressBar.progress = 30

Plus: https://kotlinlang.org/docs/tatudials/android-plugin .html


0 commentaires

0
votes

ajoutez la ligne suivante à la construction.Gradle: Appliquer plugin: 'Kotlin-android-extensions xxx

Ceci peut également être effectué en dehors de Oncreate. < / p>


6 commentaires

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é () ? Il doit é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



0
votes

FOETVIEDBYID CODE> renvoie désormais un type générique qui s'étend sur afficher code> ( DOCS) .

val progressBar = findViewById<ProgressBar>(R.id.myProgressBar)


9 commentaires

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?)