Android Kotlin - Запрос разрешения в RecyclerView Adapter - PullRequest
0 голосов
/ 27 марта 2020

Это код внутри адаптера Recyclerview:

fun DownloadImage(ImageUrl: String?) {
    if (ContextCompat.checkSelfPermission(
            context,
            Manifest.permission.READ_EXTERNAL_STORAGE
        ) != PackageManager.PERMISSION_GRANTED &&
        ContextCompat.checkSelfPermission(
            context,
            Manifest.permission.WRITE_EXTERNAL_STORAGE
        ) != PackageManager.PERMISSION_GRANTED
    ) {
        ActivityCompat.requestPermissions(
            context, // HERE
            arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
            123
        )
        ActivityCompat.requestPermissions(
            context, // AND HERE
            arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
            123
        )
        Functions(context).showToats(context,"Need Permission to access storage for Downloading Image")
    } else {
        Functions(context).showToats(context,"Downloading Image...")
        //Asynctask to create a thread to downlaod image in the background

        DownloadsImage(context).execute(ImageUrl)
    }
}

Я получаю сообщение об ошибке: Type mismatch: inferred type is Context but Activity was expected где я это прокомментировал.

Как это сделать правильно?

getActivity () тоже не работает.

1 Ответ

0 голосов
/ 27 марта 2020

Метод getActivity() не будет работать, поскольку Recyclerview.Adapter не является fragment. Чтобы получить ссылку на текущий activity, попробуйте передать его конструктору adapter.

Например, (в kotlin)

class YourAdapter(val yourActivity : AppCompatActivity) : RecyclerView.Adapter<YourViewHolder>()

Затем используйте его как

ActivityCompat.requestPermissions(
            yourActivity, // HERE
            arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
            123
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...