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:

  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); } } 

  • Comment puis-je utiliser Android pour télécharger un fichier basé sur la session / cookie à l'aide de WebView?
  • Lost AppCache par Android 4.4 WebView
  • Télécharger le fichier dans WebView
  • Comment télécharger par programme une page Html dans Android et obtenir son Html?
  • Où puis-je télécharger les API docs pour Android?
  • PARTIAL_WAKE_LOCK vs SCREEN_DIM_WAKE_LOCK dans le thread de téléchargement
  • Télécharger et extraire le fichier Zip dans Android
  • Téléchargement d'image Android AWS Server
  • 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.