当isVisible时如何关闭一个片段 [英] How to close one fragment when isVisible

查看:44
本文介绍了当isVisible时如何关闭一个片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,我有一个片段活动.当我点击图标或类似的东西时,我只能打开一个片段但是我想用OnBackPressed方法关闭一个片段(或隐藏).

Hello i having an activity with fragment. I can just open one fragment when i click on icon or something like this But i want to close a fragment(or hide) with OnBackPressed method.

我创建了这个:

private void onBackPressedInFragments(){
    if(backgroundSelectFragment != null && backgroundSelectFragment.isVisible())
    backgroundSelectFragment.getActivity().onBackPressed();
}

但是当我打开一个片段并单击Phone中的backbutton时,我只是关闭了该应用程序.我的应用程序有一个活动和2个片段:

but when i open a fragment and click backbutton in Phone i just close the application. My Application have one activity and 2 fragments:

我在这里创建并显示片段:

Here i create and showing the fragment:

 backgroundBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (backgroundSelectFragment == null) {
                backgroundSelectFragment = new BackgroundSelectFragment();
                FragmentManager fm = getFragmentManager();
                fm.beginTransaction()
                        .add(R.id.main_relative, backgroundSelectFragment, "background")
                        .setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
                        .show(backgroundSelectFragment)
                        .commit();
            } else {
                if (backgroundSelectFragment.isHidden()) {
                    showFragmentBackground();
                } else {
                    hideFragmentBackground();
                }
            }
        }
    });

有什么主意吗?

推荐答案

覆盖活动中的 onBackPressed .如果Backstack中有除 popBackStack()之外的任何片段,否则只需 finish()您的活动即可.

Override onBackPressed in your activity. If there is any fragment in backstack than popBackStack() otherwise simply finish() your activity.

private boolean allowedToExit = false; // class level

@Override
public void onBackPressed() {
    int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount();
    // this is the last item
    if (backStackEntryCount == 1) {
        if (allowedToExit)
            finish();
        else {
            allowedToExit = true;
            Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show();
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    allowedToExit = false;
                }
            }, 1000);
            return;
        }
    }
    // we have more than 1 fragments in back stack
    if (backStackEntryCount > 1) {
        getSupportFragmentManager().popBackStackImmediate();
        // getSupportFragmentManager().beginTransaction().commit();
    } else
        super.onBackPressed();
}

这篇关于当isVisible时如何关闭一个片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆