I build app with gridView gallery inside dialog. All gallery works good but now I want separate some photos from another (need to create some kind of headers). For example I have on my SD card folder with some photos named : 1v1.jpg / 1v2.jpg / 1v3.jpg / 2v1.jpg / 2v2.jpg, now I want to display it in my gridView gallery (let's assume that it have 2 columns)
How it should look:
1
1v1.jpg 1v2.jpg
1v3.jpg
2
2v1.jpg 2v2.jpg
etc
For now I have gallery with only photos
Some code :
GridAdapter :
public class GridAdapter extends BaseAdapter {
Context mContext;
ArrayList<File> listFiles;
public GridAdapter(Context context, ArrayList<File> files) {
this.mContext = context;
this.listFiles = files;
}
@Override
public int getCount() {
return listFiles.size();
}
@Override
public Object getItem(int position) {
return listFiles.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null)
{
convertView = LayoutInflater.from(mContext).inflate(R.layout.my_grid, parent, false);
}
final ImageView iv = (ImageView) convertView.findViewById(R.id.imageView);
Glide.with(mContext)
.load(listFiles.get(position).getAbsolutePath()) //path to picture
.into(iv);
return convertView;
}
} //end of gridadapter
//rest code
public ArrayList<File> photoList;
public ArrayList<String> albumList;
photoList = imageReader(photoDir);
albumList = albumReader(photoDir);
//function to get all file paths (works)
private ArrayList<File> imageReader(File root)
{
ArrayList<File> a = new ArrayList<>();
File[] files = root.listFiles();
for (File file : files) {
if (file.isDirectory()) {
a.addAll(imageReader(file));
} else {
if (file.getName().length() == 14)
{
a.add(file);
}
}
}
return a;
}
//function to get all headers name (works)
private ArrayList<String> albumReader(File root)
{
ArrayList<String> pages = new ArrayList<>();
File[] files = root.listFiles();
for (File file : files)
{
String photoName;
String temp = "";
photoName = file.getName();
if(photoName.length()==14)
{
photoName = photoName.substring(0, 4);
if (!temp.equals(photoName))
{
if(pages.isEmpty() || !pages.contains(photoName))
{
pages.add(photoName);
temp = photoName;
}
else
{
break;
}
}
}
}
return pages;
}
public void firstChoiceDialogGallery() {
inflater = this.getLayoutInflater();
// Dialog layout
v = inflater.inflate(R.layout.dialog_choice, null);
// Get gridView from dialog_choice
gV = (GridView) v.findViewById(R.id.gridView);
// GridAdapter (Pass context and files list)
GridAdapter adapter = new GridAdapter(this, photoList);
// Set adapter
gV.setAdapter(adapter);
final AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
builder2.setTitle("MY GALLERY");
builder2.setView(v);
builder2.setPositiveButton("NEXT", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setNegativeButton("BACK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder2.setCancelable(false);
final AlertDialog dialog = builder2.create();
dialog.show();
}
XMLs : grid_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="@integer/width"
android:layout_height="@integer/height"
android:adjustViewBounds="true"
android:id="@+id/imageView"
android:layout_margin="5dp"
android:layout_centerVertical="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
grid.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_choice"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:numColumns="@integer/column_count"
android:clickable="true"/>
</RelativeLayout>
As you see I wrote function to get header names, gallery works, but now I don't have Idea how to place this names in specific places and how to do that. I was thinking about put it to my existing adapter but it doesnt't work
P.S I read about StickyGridHeaders so giving here link to lib source isn't answer, because already know about it. Problem is that I'm not sure that this is what I want + I don't have idea how to implement it this existing code