0
我正在使用異步任務在我的recyclerView中添加數據併爲每個列表項設置進度條,當我點擊該項目時該項目將下載並正在加載進度條顯示。在我去另一個活動後,然後返回下載過程工作,但進度條不顯示我想看到進度條。返回到活動狀態後Android進度條未加載
我想這就是問題所在:在的onClick監聽-i顯示進度條
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 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);
}
}
嘿這是不工作,當我點擊進度條顯示。我點擊返回按鈕,然後回滾進度條不顯示,但下載進度在後臺運行 – yathavan