I am working on an application where I have to display images stored in phone directory.I have implemented the code to get all images in recyclerview, but I want to show the date of the image when it was taken inside header. I have searched for many days but couldn't find any specific answer. The design I am following is in this Image
Here I am initializing my view
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view= inflater.inflate(R.layout.fragment_list_images,container,false);
ButterKnife.bind(this,view);
context= view.getContext();
adapter= new ImagesAdapter();
LinearLayoutManager linearVertical = new LinearLayoutManager(view.getContext(), LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(linearVertical);
recyclerView.setAdapter(adapter);
checkboxHeaderVideo.setClickable(false);
adapter.setData(getImages(context));
return view;
}
And here I am getting all pictures from directory
private List<ImagesModel> getImages(Context context) {
ArrayList<ImagesModel> ImagesModels= new ArrayList<>();
int int_position = 0;
Uri uri;
int column_index_data, thum, column_index_gif, thumGif;
String absolutePathOfImage = null;
String duration = null;
uri = MediaStore.Image.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.MediaColumns.DATA, MediaStore.Image.Media.BUCKET_DISPLAY_NAME,MediaStore.Image.Media._ID,MediaStore.Image.Thumbnails.DATA};
final String orderBy = MediaStore.Image.Media.DATE_TAKEN;
cursor = context.getContentResolver().query(uri, projection, null, null, orderBy + " DESC");
column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
thum = cursor.getColumnIndexOrThrow(MediaStore.Image.Thumbnails.DATA);
while (cursor.moveToNext()) {
absolutePathOfImage = cursor.getString(column_index_data);
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
File files= new File(absolutePathOfImage);
if (files.exists()){
retriever.setDataSource(absolutePathOfImage);
ArrayList<String> list = AppUtils.fileParsing(absolutePathOfImage);
String path_name =list.get(0);
Log.i("path name",path_name);
ImagesModel obj_model = new ImagesModel();
obj_model.setImageName(path_name);
obj_model.setThumbNail(cursor.getString(thum));
obj_model.setSelected(false);
obj_model.setAbsolutePath(absolutePathOfImage);
ImagesModels.add(obj_model);
}
}
listSize= ImagesModels.size();
return ImagesModels;
}
Image Adapter.
public class ImagesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
List<ImagesModel> modelList;
private boolean selection;
OnSelectionChangeListener selectionChangeListener;
int count=0;
public void setSelectionChangeListener(OnSelectionChangeListener selectionChangeListener) {
this.selectionChangeListener = selectionChangeListener;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.li_Images_list,parent,false);
return new ImagesItemHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
int size= modelList.size();
((ImagesItemHolder)holder).bindData(modelList.get(position),position,size);
}
@Override
public int getItemCount() {
return modelList.size();
}
public void setData(List<ImagesModel> list) {
this.modelList= list;
notifyDataSetChanged();
}
public boolean isSelection() {
return selection;
}
public void setSelection(boolean selection) {
this.selection = selection;
if (selectionChangeListener != null)
selectionChangeListener.onSelectionChange(selection);
notifyDataSetChanged();
}
public void clearSelection() {
for (ImagesModel obj : getData()) {
obj.setSelected(false);
}
setSelection(false);
count=0;
}
public interface OnSelectionChangeListener {
void onSelectionChange(boolean selection);
}
public List<ImagesModel> getData() {
return modelList;
}
public void setChecked(int position) {
count++;
getData().get(position).setSelected(!getData().get(position).isSelected());
if (!isAnyItemSelected()) {
setSelection(false);
} else notifyItemChanged(position);
}
boolean isAnyItemSelected() {
for (ImagesModel obj : getData()) {
if (obj.isSelected())
return true;
}
return false;
}
public void setCheckedAll(boolean selection) {
for (ImagesModel object : getData())
object.setSelected(selection);
count= getData().size();
setSelection(selection);
}
public int getSelectedItemCount(){
return count;
}
public ArrayList<ImagesModel> getAllSelectedItems() {
ArrayList<ImagesModel> selectedObjects = new ArrayList<>();
if (getData() != null && !getData().isEmpty()) {
for (ImagesModel item : getData()) {
if (item.isSelected()) selectedObjects.add(item);
}
}
return selectedObjects;
}
Problem is i don't know how to add Date as header in specific format and show related images below that specific date