Android 在多个片段中启动DialogFragment时出错

Android 在多个片段中启动DialogFragment时出错,android,android-viewpager,android-dialogfragment,Android,Android Viewpager,Android Dialogfragment,我目前有一个ViewPager,它有3个选项卡。每个选项卡都是一个片段。我做了一个自定义的dialogFragment来登录。我只想在我进入第三个选项卡时打开logindialog。在onCreateView中,我创建了一个新的logindialog和show对象。我的问题是,每当我从第一个选项卡切换到第二个选项卡时,对话框也会出现,我不希望这样 这是我的viewpager适配器 public Fragment getItem(int position) { switc

我目前有一个ViewPager,它有3个选项卡。每个选项卡都是一个片段。我做了一个自定义的dialogFragment来登录。我只想在我进入第三个选项卡时打开logindialog。在onCreateView中,我创建了一个新的logindialog和show对象。我的问题是,每当我从第一个选项卡切换到第二个选项卡时,对话框也会出现,我不希望这样

这是我的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;
    }

ViewPager
将创建并保留“屏幕外”页面作为性能优化(默认情况下,两个方向都有一个屏幕外页面)。实际上,这意味着当您在第1页时,第2页已经在屏幕外创建。当您从第1页切换到第2页时,现在第3页在屏幕外创建(如果您想切换回第1页,则保留第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);