public void onBindViewHolder(MyAdapter.MyViewHolde holder, int position) {
//how to set image for loading the images for gallery
----------
}
//and code for how to get images from gallery in main activity
public void onBindViewHolder(MyAdapter.MyViewHolde holder, int position) {
//how to set image for loading the images for gallery
----------
}
//and code for how to get images from gallery in main activity
You have to first get all images from gallery in you activity then have to set the list of images to RecyclerView
Use below method to get all all images-
private ArrayList<String> getAllShownImagesPath(Activity activity) {
Uri uri;
Cursor cursor;
int column_index_data, column_index_folder_name;
ArrayList<String> listOfAllImages = new ArrayList<String>();
String absolutePathOfImage = null;
uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = { MediaColumns.DATA,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME };
cursor = activity.getContentResolver().query(uri, projection, null,
null, null);
column_index_data = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
column_index_folder_name = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
while (cursor.moveToNext()) {
absolutePathOfImage = cursor.getString(column_index_data);
listOfAllImages.add(absolutePathOfImage);
}
return listOfAllImages;
}
Now set the This list of images to RecyclerView
Adapter.
Take this RecyclerView Example as an reffrence to set all gallery images.
public class GalleryFragment extends Fragment {
public GalleryFragment() {
// Required empty public constructor
}
private Context context;
private RecyclerView recyclerView;
ArrayList<String> imageData;
MyAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_gallery, container, false);
context = getActivity();
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 3);
recyclerView.setLayoutManager(layoutManager);
MyTask myTask = new MyTask();
myTask.execute();
return view;
}
private class MyTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
imageData = getAllShownImagesPath(getActivity());
Log.e("imageData: ", String.valueOf(imageData.size()));
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
adapter = new MyAdapter(imageData, getActivity());
recyclerView.setAdapter(adapter);
}
}
private ArrayList<String> getAllShownImagesPath(Activity activity) {
Uri uri;
Cursor cursor;
int column_index_data, column_index_folder_name;
ArrayList<String> listOfAllImages = new ArrayList<String>();
String absolutePathOfImage = null;
uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.MediaColumns.DATA,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
cursor = activity.getContentResolver().query(uri, projection, null,
null, null);
column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
column_index_folder_name = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
while (cursor.moveToNext()) {
absolutePathOfImage = cursor.getString(column_index_data);
listOfAllImages.add(absolutePathOfImage);
}
return listOfAllImages;
}
}
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolde> {
Context context;
private ArrayList<String> imageData = new ArrayList<String>();
public MyAdapter(ArrayList<String> imageData, FragmentActivity activity) {
this.imageData = imageData;
this.context = activity;
}
@Override
public MyAdapter.MyViewHolde onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.inflate_single_image_row, parent, false);
return new MyViewHolde(itemView);
}
@Override
public void onBindViewHolder(MyAdapter.MyViewHolde holder, int position) {
String data = imageData.get(position);
if (data != null){
Glide.with(context).load(data).into(holder.singleImageView);
}else {
Toast.makeText(context, "Images Empty", Toast.LENGTH_SHORT).show();
}
}
@Override
public int getItemCount() {
return imageData.size();
}
public class MyViewHolde extends RecyclerView.ViewHolder {
ImageView singleImageView;
public MyViewHolde(View itemView) {
super(itemView);
singleImageView = (ImageView) itemView.findViewById(R.id.singleImageView);
}
}
}
This Get list of photo galleries on Android will help you.. One thing i want to add here is you should add the gallery retrieving data inside a AsyncTask or Thread. It is not good practice to fetch gallery data in UI thread because if gallery images are huge than you may get ANR due to processing in UI tread.
//Get all image
private void getImageData() {
Uri uri= MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
{
Cursor cursor= getContentResolver().query(uri
,null
,null
,null);
if (cursor != null && cursor.moveToFirst())
{
do{
String path=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
String date
=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN));
String imagename
=cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
Image_ModelClass modelClass=new Image_ModelClass(path,date,imagename);
image_list.add(modelClass);
}while (cursor.moveToNext());
}
cursor.close();
}
// Model Class
public class Image_ModelClass implements Serializable {
String Path;
String Date;
String ImageName;
public Image_ModelClass(String path, String date, String imageName) {
Path = path;
Date = date;
ImageName = imageName;
}
public String getPath() {
return Path;
}
public void setPath(String path) {
Path = path;
}
public String getDate() {
return Date;
}
public void setDate(String date) {
Date = date;
}
public String getImageName() {
return ImageName;
}
public void setImageName(String imageName) {
ImageName = imageName;
}
}
//set image using recycler
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
public class image_adapter extends RecyclerView.Adapter<image_adapter.UserHolder> {
Context context;
ArrayList<Image_Model>image_list;
public image_adapter(Context context, ArrayList<Image_Model> image_list) {
this.context = context;
this.image_list = image_list;
}
@NonNull
@Override
public image_adapter.UserHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(context).inflate(R.layout.image_item,parent,false);
return new UserHolder(view);
}
@Override
public void onBindViewHolder(@NonNull image_adapter.UserHolder holder, int position) {
Image_Model model=image_list.get(position);
Glide
.with(context)
.load(model.getPath())
.centerCrop()
.into(holder.imageView);
}
@Override
public int getItemCount() {
return image_list.size();
}
public class UserHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public UserHolder(@NonNull View itemView) {
super(itemView);
imageView=itemView.findViewById(R.id.Item_image);
}
}
}