В моем приложении у меня есть два действия 1.RecorderActivity 2. GridViewActivity
В RecorderActivity на панели инструментов есть параметр под названием выбрать изображение , когда эта опция нажата, открывается GridViewActivity.В GridViewActivity у меня есть две опции на панели инструментов, называемые захват изображения с камеры и выбор изображения из галереи.
Когда изображения выбираются из галереи, они отображаются в recyclerView в GridViewActivity, например:
После этого я сохранил этот ArrayList в SharedPreferences.
Это код
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
int count=0;
if(requestCode==PICK_IMAGE_MULTIPLE && resultCode==RESULT_OK) {
String[] filePath = {MediaStore.Images.Media.DATA};
if (data.getData() != null) {
//if single image is selected
Uri imageUri = data.getData();
Cursor cursor = getContentResolver().query(imageUri, filePath, null, null, null);
cursor.moveToFirst();
arrayList.add(new Images(imageUri.toString()));
cursor.close();
} else {
if (data.getClipData() != null) {
ClipData mClipData = data.getClipData();
for (int i = 0; i < mClipData.getItemCount(); i++) {
ClipData.Item item = mClipData.getItemAt(i);
Uri uri = item.getUri();
// Get the cursor
Cursor cursor = getContentResolver().query(uri, filePath, null, null, null);
// Move to first row
cursor.moveToFirst();
arrayList.add(new Images(uri.toString()));
count++;
cursor.close();
}
}
}
imagesAdapter=new ImagesAdapter(context,arrayList);
sharedPref.save(arrayList); //store arraylist in SharedPref
sharedPref.updateCount(count); //store images count in SharedPref
Log.d("ROHIT","data saved");
setRecyclerView();
}
}
После этого, когда я нажимал назад и сновакогда я снова щелкнул по опции выбора изображения в RecorderActivity, GridviewActivity открылась, но теперь карты RecyclerView просто пустые, изображение не отображается в нем.
Этокод, в котором я возвращаю ArrayList из SharedPref в onCreate ()
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid_view);
recyclerView=findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
autoFitGridLayoutManager=new AutoFitGridLayoutManager(context,250);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setLayoutManager(autoFitGridLayoutManager);
arrayList=new ArrayList<>();
sharedPref=new SharedPref(context);
if (sharedPref.getCount()==0) {
Toast.makeText(context, "No images...", Toast.LENGTH_SHORT).show();
}
else {
Gson gson=new Gson();
String response=sharedPref.getImages();
arrayList=gson.fromJson(response,new TypeToken<ArrayList<Images>>(){}.getType()); //gettign ArrayList back from SharedPref
Log.d("ROHIT", String.valueOf(sharedPref.getCount()));
Log.d("ROHIT", String.valueOf(arrayList.size())); //arraylist size is also correct after getting it from SharedPref
imagesAdapter=new ImagesAdapter(context,arrayList);
setRecyclerView();
}
}
public void setRecyclerView() {
ItemTouchHelper.Callback callback=new ItemMoveCallback(imagesAdapter);
ItemTouchHelper touchHelper=new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(recyclerView);
recyclerView.setAdapter(imagesAdapter);
}
После этого, когда я снова выбираю то же изображение из галереи, оно отображает предыдущее изображение и новое выбранное изображение в RecyclerView.
Скажите, пожалуйста, в чем проблема в моем коде, или скажите, есть ли другой способ добиться этого?шляпа я хочу.