Как скачать файл, когда нажата кнопка внутри RecyclerView? - PullRequest
0 голосов
/ 21 декабря 2018

Я создаю приложение, в котором есть кнопка, которая при нажатии запускает загрузку файла.Кнопка на RecyclerView, и я использую стандартный Android Download Manager.

Я попытался сделать setOnClickListener для этой кнопки внутри onBindViewHolder на моем адаптере Recycler View и включить в нее содержимое функции:

holder.button.setOnClickListener {
    val request = DownloadManager.Request(Uri.parse(downloadurl))
    request.setTitle("$downloadname.apk")
    request.setDescription("Download")
    request.setVisibleInDownloadsUi(true)
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS)
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
    val manager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
    manager.enqueue(request)
}

, но в getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager говорит мне, что мне нужен Context, а не String.

Затем я попытался создать объект, имеющий функцию загрузки, но он выдает мне ту же ошибку, что и функция.

Как я могу заставить это работать на объекте или setOnClickListener?

1 Ответ

0 голосов
/ 21 декабря 2018

это сообщение об ошибке вызвано непередачей ожидаемого целевого имени файла:

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);

, и вам необходимо получить дескриптор Context, так как метод getSystemService() требует:

@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, int position) {

    final SomeClass item = getItem(position);

    ((ViewHolder) viewHolder).getDataBinding().buttonDownload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Context context = ((ViewHolder) viewHolder).mRecyclerView.getContext();
            DownloadManager manager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);

            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(item.getDownloadUrl()));
            request.setTitle(item.getTitle());
            request.setDescription(item.getDescription());
            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, item.getFileName());
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setVisibleInDownloadsUi(true);
            manager.enqueue(request);
        }
    });
}

не смог преобразовать это самостоятельно из Java в Kotlin (при вставке кода будет запрашиваться .kt).

...