آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

قرار دادن دکمه کنسل دانلود در لیست ویو

f-Dehghan  10 سال پیش  10 سال پیش
+1 0

با این پروژه میشه برای هر آیتم لیست ویو یک پروگرس بار داشت که پروگرس هر آیتم برای خودش آپدیت میشه (جای عناصر لیست ویو قاطی نمیشه) .https://github.com/mdkess/ProgressBarListView

 

خیلی عالی بود فقط مشکل من اینه که  برای اینکه کنار پروگرس بار یک دکمه حذف داشته باشیم که زمانی که روی اون کلیک میشه دانلود کنسل بشه ، کد زیرو کجا باید بگذارم؟

  clickcancel = new OnClickListener() {

@Override
public void onClick(View arg0) {
downloadRequest.cancel();
}
};
if (clickcancel != null) {
btnCancel.setOnClickListener(clickcancel);
}

من doinbackground کلاس filedownloadtask رو این طوری تغییر دادم که با کلیک روی دکمه دانلود شروع میشه

    @Override
protected Void doInBackground(Void... params) {

mInfo.setDownloadState(DownloadState.DOWNLOADING);
filename = mInfo.getFilename();
int size = mInfo.getTotalSize();

OnProgressDownloadListener progressListener = new OnProgressDownloadListener() {

@Override
public void onProgressDownload(final int percent, final int downloadedSize, final int fileSize) {

publishProgress(percent);

}
};

OnDownloadCompleteListener completeListener = new OnDownloadCompleteListener() {

@Override
public void OnDownloadComplete(final String filepath) {
G.HANDLER.post(new Runnable() {

@Override
public void run() {
String mydes = filepath.replace("/temp/", "/final/");
copyFile(filepath, mydes);
new File(filepath).delete();
}
});
}
};

downloadRequest = new StructureSound(filename, size)
.downloadPath("http://allbaloo.ir/" + filename)
.filepath(G.DIR_TEMP + "/" + filename)
.completeListener(completeListener)
.progressListener(progressListener)
.simulate(true);
boolean online = isOnline();
if (online) {
downloadRequest.download();
}
else {
G.HANDLER.post(new Runnable() {

@Override
public void run() {
Toast.makeText(G.context, R.string.noconnection, Toast.LENGTH_LONG).show();
}
});
}

mInfo.setDownloadState(DownloadState.COMPLETE);

return null;
}

کد دانلود هم به این شکله:

     public void cancel() {
isCancelled = true;
}


public StructureSound download() {
Thread thread = new Thread(new Runnable() {

@Override
public void run() {
try {
URL url = new URL(downloadPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();

totalSize = connection.getContentLength();

File file = new File(filepath);
if (file.exists()) {
file.delete();
}

FileOutputStream outputStream = new FileOutputStream(filepath, true);

InputStream inputStream = connection.getInputStream();
byte[] buffer = new byte[G.DOWNLOAD_BUFFER_SIZE];
int len = 0;
while ( !isCancelled && (len = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
downloadedSize += len;

percent = (int) (100.0f * (float) downloadedSize / totalSize);
if (progressListener != null) {

final int finalDownloadedSize = downloadedSize;
G.HANDLER.post(new Runnable() {

@Override
public void run() {
progressListener.onProgressDownload(percent,
finalDownloadedSize, totalSize);

}
});
}

if (simulate) {
try {
Thread.sleep(100);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}

}

outputStream.close();
if (isCancelled) //این قسمت کنسل را چک میکند
{
if (file.exists()) {
file.delete();
isCancelled = false;
}
}
else
if (completeListener != null)
completeListener.OnDownloadComplete(filepath);
}
catch (MalformedURLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
});

thread.start();

return this;
}
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
ba2ever  10 سال پیش
+1 0

ببین این لینک  کارتو راه میندازه 

 

0 0
با کنسل کردن مشکلی ندارم یک ایتم به راحتی دانلودش کنسل میشه ولی توی لیست ویو دکمه کنسل یک آیتم رو که میزنم آخرین موردی که به لیست دانلودها اضافه شده کنسل میشه کدی که زدم پایین میگذارم (10 سال پیش)
پاسخ به سوال 
f-Dehghan  10 سال پیش
0 0

  holder.btnCancel.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (mTasks.size() > 0)
FileDownloadTask.downloadRequests.get(position).cancel();
}
});

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .