Mettre à jour la barre de progression dans listview pour le téléchargement de fichiers multiples

Comment mettre à jour une barre de progression dans ListView. Lorsque chaque barre de progression est associée au téléchargement d'un fichier et qui se fait via AsyncTask.

La fonction sera:

  • Couchbase Lite sur Android L
  • Utilisation de la bibliothèque android.support.v4 dans l'idée Intellij
  • RecyclerView Swipe avec une vue ci-dessous
  • GCM 3.0 est-il nécessaire de créer un jeton d'enregistrement?
  • Gestionnaire d'emplacement Android, Obtenez l'emplacement GPS, si aucun GPS ne se rend alors à l'emplacement du fournisseur de réseau
  • Sécurité des threads dans les bibliothèques Android
    1. Chaque barre de progression sera mise à jour avec le processus de téléchargement.
    2. Lorsqu'un fichier complet téléchargé, il sera sauvegardé dans la carte sd.
    3. Il sera ajouté service (en cours d'exécution en arrière-plan.
    4. Lorsqu'un fichier téléchargé doit afficher "Complet" (ne doit pas être supprimer la liste des formulaires)

    J'ai également utilisé une base de données pour télécharger le fichier. La liste dépend également du vecteur de la base de données. Comment puis-je l'implémenter. J'ai également essayé mais je n'ai pas eu de solution.

    Voici les deux captures d'écran pour le décrire en détail:

    Entrez la description de l'image ici

    J'ai également essayé ce code:

    temp = databaseHandler.getAllNotifyNumber(); list_download = (ListView) findViewById(R.id.list_download); myCustomAdapter = new MyCustomAdapter(mContext); list_download.setAdapter(myCustomAdapter); myCustomAdapter.notifyDataSetChanged(); for (int index = 0; index < temp.size(); index++) { String url = "http://upload.wikimedia.org/wikipedia/commons/0/05/Sna_large.png"; grabURL(url); } 

    Ceci est AsyncTask mathod:

      public void grabURL(String url) { new GrabURL().execute(url); } private class GrabURL extends AsyncTask<String, Integer, String> { protected String doInBackground(String... urls) { String filename = "MySampleFile.png"; File myFile = new File(directory, filename); try { URL url = new URL(urls[0]); URLConnection connection = url.openConnection(); connection.connect(); int fileSize = connection.getContentLength(); InputStream is = new BufferedInputStream(url.openStream()); OutputStream os = new FileOutputStream(myFile); byte data[] = new byte[1024]; long total = 0; int count; while ((count = is.read(data)) != -1) { total += count; publishProgress((int) (total * 100 / fileSize)); os.write(data, 0, count); } os.flush(); os.close(); is.close(); } catch (Exception e) { e.printStackTrace(); } return filename; } @Override protected void onProgressUpdate(Integer... progress) { // home_countprogress.setVisibility(View.VISIBLE); // home_countprogress.setText(String.valueOf(progress[0]) + "%"); // progressbar_horizontal.setProgress(progress[0]); myCustomAdapter.notifyDataSetChanged(); } @Override protected void onCancelled() { Toast toast = Toast.makeText(getBaseContext(), "Error connecting to Server", Toast.LENGTH_LONG); toast.setGravity(Gravity.TOP, 25, 400); toast.show(); } @Override protected void onPostExecute(String filename) { // progressbar_horizontal.setProgress(100); // home_countprogress.setVisibility(View.VISIBLE); } protected void onPreExecute() { // progressbar_horizontal.setVisibility(View.VISIBLE); // progressbar_horizontal.setProgress(0); // home_countprogress.setVisibility(View.VISIBLE); myCustomAdapter = new MyCustomAdapter(mContext); } } 

  • Créer un nouveau menuInflater ou getMenuInflater () à partir de l'activité?
  • Comment mettre mes bibliothèques devant android.jar en éditant build.gradle dans Android-Studio
  • Comment inclure un fichier .so lib dans Intellij IDEA pour un projet Android?
  • Comment obtenir un bitmap à partir d'un dessinable défini dans un xml?
  • Contrainte de clé étrangère ON DELETE CASCADE ne fonctionne pas dans la base de données sqlite sur Android
  • Création d'une application Android avec targetSdkVersion de 25 et minSdkVersion 19
  • 2 Solutions collect form web for “Mettre à jour la barre de progression dans listview pour le téléchargement de fichiers multiples”

    Au lieu de notifier votre adaptateur chaque fois que votre progression change (ce qui est tout le temps) et rendant cela totalement inefficace, vous pouvez essayer de faire ce qui suit.

    • Créez une vue personnalisée pour chaque ligne dans ListView
    • Ajoutez une méthode appelée 'setData ()' ou quelque chose. Appelez ceci dans le rappel getView () de l'adaptateur, en définissant les données pour cette vue.
    • Inside 'setData ()' enregistre cette vue comme un auditeur pour les mises à jour de la progression de la tâche asynchrone.
    • Remplacez onStartTemporaryDetach () et onDetachedFromWindow () dans votre vue personnalisée. Assurez-vous de vous désinscrire des mises à jour de tâches asynchrones là-bas (sinon vous obtiendrez une fuite de mémoire).
    • Dans votre tâche asynchrone, il suffit de notifier tous les auditeurs enregistrés (qui sont probablement détenus dans une carte d'urls aux auditeurs ou quelque chose comme ça).

    Au lieu d'utiliser ListView, essayez ceci:

    Créez une mise en page qui contiendra vos trucs + ProgresseBar, il apparaîtra comme ça

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="3dp"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/image" android:visibility="gone" /> </LinearLayout> 

    Et dans la mise en page de votre activité / fragment, remplissez votre ListView par LinearLayout (ou LinearLayout dans une ScrollView) avec les mêmes propriétés que votre liste:

     <ScrollView android:id="@+id/scrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </LinearLayout> </ScrollView 

    Et dans votre activité, créez une fonction:

     private void addMyView(String url){ LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View mView = mInflater.inflate(R.layout.my_layout, null, false); ProgressBar mBar = (ProgressBar) mView.findViewById(R.id.progress); container.addView(mView); grabURL(url); // starting your task here 

    }

    N'oubliez pas non plus votre LinearLayout:

     LinearLayout container = (LinearLayout) findViewById(R.id.container); 

    puis :

     for (int index = 0; index < temp.size(); index++) { String url = "http://upload.wikimedia.org/wikipedia/commons/0/05/Sna_large.png"; addMyView(url);`enter code here } 

    J'espère que ça aide 🙂

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.