Итак, я загрузил все свои изображения с помощью загрузчика курсора и перенес эти изображения в адаптер (адаптер, используемый в gridview).Я реализовал прослушиватель по щелчку в виде сетки, который будет отображать изображение в новом действии.
Все это работает нормально, однако, когда я нажимаю кнопку «Назад», я ожидаю вернуться к своей основной деятельности (просмотр сетки со всеми изображениями), но мое приложение вылетает.
Вот некоторые подробности.
Метод создания.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// The gridview, and the image adapter is set up here.
setupViews();
// Once runtime permission is given, image paths are
// 1. pulled into a cursor,
// 2. added onto the imageAdapter
// 3. and the imageAdapter is set to be used by the gridview.
askForRuntimePermission();
}
askForRuntimePermission и onRequestPermissionsResult (метод обратного вызова).
private void askForRuntimePermission() {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, STORAGE_PERMISSION_CODE);
}
else
{
getSupportLoaderManager().initLoader(MEDIASTORE_LOADER_ID,null,this);
}
}
/**
* Callback method for request permmissions method.
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch(requestCode)
{
case STORAGE_PERMISSION_CODE:
if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
getSupportLoaderManager().initLoader(MEDIASTORE_LOADER_ID,null,this);
}
else
{
Toast.makeText(this,"Permission Denied",Toast.LENGTH_SHORT).show();
finish();
}
break;
}
}
Реализация загрузчика курсора.
@NonNull
@Override
public Loader<Cursor> onCreateLoader(int i, @Nullable Bundle bundle) {
String[] projection = {MediaStore.Images.Media.DATA};
return new CursorLoader(this,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
null,
null,
MediaStore.Images.Media.DATE_ADDED + " DESC");
}
@Override
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor cursor) {
*transferImagesToAdapter(cursor);*
}
@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
}
В методе TransferImagesToAdapter я перенес и настроил gridView с его адаптером, отображая изображения в сетке.
Однако, как уже упоминалось, после щелчка по любому изображению оно будет отображаться в полноэкранном режиме при новом действии, но при нажатии кнопки «Назад» происходит сбой приложения.
Любая помощь?