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:

  • Afficher un seul enfant de la liste extensible à la fois
  • Qu'est-ce que le fichier boot.img dans Android?
  • Le classement du marché Android et les installations actives
  • Comment verrouiller / Déverrouiller l'écran par programme?
  • Android Shape Line
  • Déclaration de format dans un fichier de ressource de chaîne
    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); } } 

  • Green DAO vs ORM lite vs Active Android
  • Les autorisations ne fonctionnent pas
  • Pourquoi la dépendance play-services-analytics n'inclut-elle pas les classes GooglePlayServicesUtil ou GoogleApiAvailability?
  • Android - Google Play comme des onglets
  • Téléchargement de l'image vers le serveur en Multipart avec les données JSON dans Android
  • Quels sont les connaissances antérieures que suppose le développement d'Android?
  • 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.