У меня есть фрагмент с GridView изображений, заполненный Пикассо, и я нажимаю на изображения, чтобы вывести меня на полный экран выбранного изображения. Я хочу иметь возможность "выбрать" несколько, аналогично галерее камеры iphone, чтобы выбрать для удаления.
У меня есть меню опций, где вы можете выбрать «выбрать». В onOptionsItemSelected как мне вернуться к моему GridView? И как мне изменить onClick на «выбрать» и изображение вместо того, чтобы сделать его полноэкранным?
У меня есть GridView, заполненный изображениями, работающими так, как задумано. Когда вы нажимаете на изображение, оно открывает действие FullImage, которое делает изображение полноэкранным. И вы можете нажать на изображение еще раз, чтобы завершить полноэкранный режим.
открытый класс GalleryFragment extends Fragment {
private GalleryViewModel galleryViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
galleryViewModel =
ViewModelProviders.of(this).get(GalleryViewModel.class);
View root = inflater.inflate(R.layout.fragment_gallery, container, false);
// Allows gallery to change nav bar use
setHasOptionsMenu(true);
setUpGrid(root);
return root;
}
/**
* Sets up the grid layout, uses ImageAdapter java class
*
* Also allows images to be clicked on
*
* @param root the page view (fragment_gallery)
*/
private void setUpGrid(View root) {
GridView gridView = (GridView) root.findViewById(R.id.photoGrid);
gridView.setAdapter(new ImageAdapter(root.getContext()));
// Allows each image to be clicked on
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
/*
This is how you pass image to be fullscreen
Note: getApplicationContext is for activities
*/
Intent i = new Intent(getActivity().getApplicationContext(), FullImageActivity.class);
i.putExtra("id", position);
startActivity(i);
}
});
}
/**
* Changes option menu layout to fit fragment
*
* @param menu
* @param inflater
*/
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear(); //Empty the old menu
inflater.inflate(R.menu.gallery, menu);
super.onCreateOptionsMenu(menu, inflater);
}
/**
Handles clicking item in option menu
* @param item
* @return
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.gallery_delete_multiple:
// How do I access the view model or GridView?
}
return super.onOptionsItemSelected(item); // important line
}
}
Это мой код адаптера изображения, сейчас он вытягивает изображения из моей папки для рисования (не важно)
открытый класс ImageAdapter расширяет BaseAdapter {private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
} else {
imageView = (ImageView) convertView;
}
//imageView.setImageResource(mThumbIds[position]);
/*
More efficient way of loading images into gallery view
*/
Picasso.get()
.load(mThumbIds[position])
.resize(350,350)
.centerCrop()
.error(R.drawable.ic_menu_send)
.into(imageView);
return imageView;
}
/*
Where it grabs images from, Can change path if needed
*/
public Integer[] mThumbIds = {
// test images
R.drawable.cover_art,
R.drawable.moon,
R.drawable.cat
};
}
Я не уверен, как передать viewmodel / inflator или GridView в функцию onOptionsItemSelected