单击关闭DialogFragment

时间:2017-05-24 20:31:43

标签: android android-fragments android-activity android-dialogfragment

我按了this tutorial(向下滚动到" 全屏图像幻灯片"部分)以实现全屏DialogFragment以创建图像幻灯片放映。

如何制作,以便当用户点击屏幕上的任意位置时,它会关闭DialogFragment

我尝试实施OnClickListenercode here),但点击事件永远不会被触发。

以下是教程中的DialogFragment类:

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);
        }
    }
}

3 个答案:

答案 0 :(得分:1)

创建OnClickListener,并使用dismiss()的{​​{1}}方法

答案 1 :(得分:1)

如果要使用DialogFragment中的按钮关闭DialogFragment,可以使用getDialog.dismiss()(Java)| dialog.dismiss()(Kotlin)方法:

var myButton= view?.findViewById(R.id.btn_my_button) as Button
myButton.setOnClickListener {
    dialog.dismiss()
}

应该这样做

答案 2 :(得分:0)

dismissAllowingStateLoss();

调用此继承的方法以关闭对话框。