Error DialogFragment从多个片段开始

问题描述 投票:1回答:1

我目前有一个带有3个标签的ViewPager。每个选项卡都是一个片段。我做了一个自定义的dialogFragment要登录。我希望仅在我的第三个选项卡上打开该登录对话框。在onCreateView中,我创建了一个logindialog的新对象并显示。我的问题是,每当我从第一选项卡切换到第二选项卡时,该对话框也会出现,而我却不想这么做。

这是我的viewpager适配器

    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                return frag1;
            case 1:
                return frag2;
            case 2:
                return frag3;
            default:
                return null;
        }
    }

我的第三个片段

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        root = inflater.inflate(R.layout.fragment_tab_annonce, container, false);

        DialogFragment loginDialog = new DialogFragment();
        loginDialog .show(getActivity().getSupportFragmentManager(), "customLogin");

        return root;
    }
android android-viewpager android-dialogfragment
1个回答
1
投票

ViewPager将创建并保留“屏幕外”页面,以进行性能优化(默认情况下,任一方向上的一个屏幕外页面)。实际上,这意味着您在第1页上时,已经在屏幕外创建了第2页。从页面1切换到页面2时,现在在屏幕外创建了页面3(如果您想切换回页面3,则保留页面1)。

这意味着onCreateView()根本不是显示错误消息的正确位置。

您也许可以创建自己的ViewPager.SimpleOnPageChangeListener子类并覆盖onPageSelected()以显示对话框。

ViewPager.OnPageChangeListener listener = new ViewPager.SimpleOnPageChangeListener() {

    @Override
    public void onPageSelected(int position) {
        if (position == 2) {
            // show dialog
        }
    }
};

viewPager.addOnPageChangeListener(listener);
© www.soinside.com 2019 - 2024. All rights reserved.