user685415
user685415

Reputation: 1

Close DialogFragment on click

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

Answers (3)

shaheer cs
shaheer cs

Reputation: 33

dismissAllowingStateLoss();

Call this inherited method to close the dialog.

Upvotes: 0

Miguel Rdz
Miguel Rdz

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

Matias Elorriaga
Matias Elorriaga

Reputation: 9150

Create an OnClickListener, and use the dismiss() method of DialogFragment

Upvotes: 1

Related Questions