J'utilise Async Task pour ajouter des données dans mon recyclerView et définir une barre de progression pour chaque élément de la liste, lorsque je clique sur l'élément que téléchargera et affichera la barre de progression en cours de chargement. après je vais à une autre activité, puis retour processus de téléchargement de travail, mais barre de progression ne montre pas je veux voir cette barre de progression.Barre de progression Android ne se charge pas après le retour à l'activité
Je pense que c'est le problème: auditeur onClick i afficher la barre de progression
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
CustomViewHolder holder = (CustomViewHolder) view.getTag();
int position = holder.getLayoutPosition();
downloading = true;
holder.progressBar.setVisibility(view.VISIBLE);
FeedItem feedItem = feedItemList.get(position);
String url = feedItem.getUrl();
url = url.replace(" ", "%20");
startDownload(position, url);
}
};
Voici mon code complet
public class SingleMovieAdapter extends RecyclerView.Adapter<CustomViewHolder> {
private List<FeedItem> feedItemList;
private Context mContext;
private Handler handler = new Handler();
private boolean downloading = false;
public SingleMovieAdapter(Context context, List<FeedItem> feedItemList) {
this.feedItemList = feedItemList;
this.mContext = context;
}
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.single_movie_songlist_row, null);
CustomViewHolder viewHolder = new CustomViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(CustomViewHolder customViewHolder, int i) {
FeedItem feedItem = feedItemList.get(i);
String title = feedItem.getTitle();
title = title.replaceAll(" - TamilTunes.com.mp3", "");
customViewHolder.textView.setText(Html.fromHtml(title));
customViewHolder.txtSinger.setText(Html.fromHtml(feedItem.getSinger()));
customViewHolder.progressBar.setProgress(feedItem.getProgress());
customViewHolder.textView.setOnClickListener(clickListener);
customViewHolder.imageView.setOnClickListener(clickListener);
customViewHolder.textView.setTag(customViewHolder);
customViewHolder.imageView.setTag(customViewHolder);
if (downloading == false) {
ColorGenerator generator = ColorGenerator.MATERIAL;
int color1 = generator.getRandomColor();
TextDrawable drawable = TextDrawable.builder().buildRound(String.valueOf(i + 1), color1);
customViewHolder.imageView.setImageDrawable(drawable);
}
}
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
CustomViewHolder holder = (CustomViewHolder) view.getTag();
int position = holder.getLayoutPosition();
downloading = true;
holder.progressBar.setVisibility(view.VISIBLE);
FeedItem feedItem = feedItemList.get(position);
String url = feedItem.getUrl();
url = url.replace(" ", "%20");
startDownload(position, url);
}
};
public void startDownload(final int position, final String url) {
Runnable runnable = new Runnable() {
int Status = 0;
public void run() {
System.out.println("URL-" + url);
String urlDownload = url;
int count = 0;
try {
URL url = new URL(urlDownload);
HttpURLConnection conexion = (HttpURLConnection) url.openConnection();
conexion.setRequestProperty("Accept-Encoding", "identity");
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
// Get File Name from URL
String fileName = urlDownload.substring(urlDownload.lastIndexOf('/') + 1, urlDownload.length());
fileName = fileName.replaceAll("%20-%20TamilTunes.com", "");
fileName = fileName.replaceAll("%20", " ");
OutputStream output = new FileOutputStream("/sdcard/" + fileName);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
System.out.println("Output - total" + total);
total += count;
Status = ((int) ((total * 100)/lenghtOfFile));
output.write(data, 0, count);
// Update ProgressBar
handler.post(new Runnable() {
public void run() {
System.out.println("Output - Status" + Status);
updateStatus(position, Status);
}
});
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
}
}
};
new Thread(runnable).start();
}
public void updateStatus(int position, int Status) {
FeedItem feedItem = feedItemList.get(position);
feedItem.setProgress(Status);
notifyItemChanged(position);
}
@Override
public int getItemCount() {
return (null != feedItemList ? feedItemList.size() : 0);
}
}
hey ceci ne fonctionne pas, quand je clique sur la barre de progression. je clique sur le bouton de retour, puis je reviens barre de progression ne pas afficher, mais le téléchargement des progrès en arrière-plan – yathavan