Reputation: 1
I followed this tutorial (scroll down to the "Fullscreen Image Slideshow" section) to implement a fullscreen DialogFragment
in order to create an image slideshow.
How can I make it so that when the user clicks anywhere on the screen, it closes the DialogFragment
?
I tried to implement an OnClickListener
(code here), but the click event never gets triggered.
Here is the DialogFragment
class from the tutorial:
public class SlideshowDialogFragment extends DialogFragment {
private ArrayList<Image> images;
private ViewPager viewPager;
private MyViewPagerAdapter myViewPagerAdapter;
private TextView lblCount, lblTitle, lblDate;
private int selectedPosition = 0;
static SlideshowDialogFragment newInstance() {
SlideshowDialogFragment f = new SlideshowDialogFragment();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_image_slider, container, false);
viewPager = (ViewPager) v.findViewById(R.id.viewpager);
lblCount = (TextView) v.findViewById(R.id.lbl_count);
lblTitle = (TextView) v.findViewById(R.id.title);
lblDate = (TextView) v.findViewById(R.id.date);
images = (ArrayList<Image>) getArguments().getSerializable("images");
selectedPosition = getArguments().getInt("position");
Log.e(TAG, "position: " + selectedPosition);
Log.e(TAG, "images size: " + images.size());
myViewPagerAdapter = new MyViewPagerAdapter();
viewPager.setAdapter(myViewPagerAdapter);
viewPager.addOnPageChangeListener(viewPagerPageChangeListener);
setCurrentItem(selectedPosition);
return v;
}
private void setCurrentItem(int position) {
viewPager.setCurrentItem(position, false);
}
// adapter
public class MyViewPagerAdapter extends PagerAdapter {
private LayoutInflater layoutInflater;
public MyViewPagerAdapter() {
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.image_fullscreen_preview, container, false);
ImageView imageViewPreview = (ImageView) view.findViewById(R.id.image_preview);
Image image = images.get(position);
Glide.with(getActivity()).load(image.getLarge())
.thumbnail(0.5f)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageViewPreview);
container.addView(view);
return view;
}
@Override
public int getCount() {
return images.size();
}
@Override
public boolean isViewFromObject(View view, Object obj) {
return view == ((View) obj);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
Upvotes: 0
Views: 3686
Reputation: 33
dismissAllowingStateLoss();
Call this inherited method to close the dialog.
Upvotes: 0
Reputation: 861
If you want to close a DialogFragment with a Button that's inside the DialogFragment you can use the getDialog.dismiss()
(Java) | dialog.dismiss()
(Kotlin) method:
var myButton= view?.findViewById(R.id.btn_my_button) as Button
myButton.setOnClickListener {
dialog.dismiss()
}
That should do it
Upvotes: 2
Reputation: 9150
Create an OnClickListener
, and use the dismiss()
method of DialogFragment
Upvotes: 1