简体   繁体   English

在Fragment上做点事回去

[英]Do something on Fragment goes back

I have code that adds a fragment on a click event. 我有在click事件上添加片段的代码。 This works and the button is removed from display afterwards, but I want the button to appear when the user presses back, and leaves the fragment. 这可以正常工作,并且此后将按钮从显示中删除,但是我希望按钮在用户按下时显示,并留下片段。 Something like onBackStackUsed . 类似于onBackStackUsed

I've tried to find something like it, but i can't find a way to do it. 我试图找到类似的东西,但是我找不到方法。 Is it even possible? 可能吗?

final FloatingActionButton floatingActionButton = (FloatingActionButton)findViewById(R.id.live_support);
floatingActionButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        getFragmentManager()
            .beginTransaction()
            .replace(R.id.live_support_frame, ChatWindowFragment.newInstance("XXX", "1"), "chat_fragment")
            .addToBackStack("chat_fragment")
            .commit();


        getFragmentManager().addOnBackStackChangedListener(
            new FragmentManager.OnBackStackChangedListener() {
                @Override
                public void onBackStackChanged() {
                    floatingActionButton.setVisibility(View.INVISIBLE);
                }
            }
        );

    }
});

I think what you want is to implement onBackPressed in your activity. 我认为您想要在活动中实现onBackPressed。 Here's a few ways to do it How to implement onBackPressed() in Fragments? 这里有几种方法。 如何在片段中实现onBackPressed()?

Override onBackPress() method in Activity and manage it like below: 覆盖Activity中的onBackPress()方法,并按以下方式进行管理:

@Override
public void onBackPressed() {
    Fragment myFragment = getSupportFragmentManager().findFragmentByTag("fragment");
    if (myFragment instanceof SearchFragment && myFragment.isVisible()) {
       //do what you want here
    }
}

Happy coding :) 快乐的编码:)

Override onBackPressed inside the activity like this: 像这样在活动内部覆盖onBackPressed

@Override
public void onBackPressed() {
    Fragment frag = getSupportFragmentManager().findFragmentByTag("fragment");
    if(frag instanceOf SearchFragment && frag.getTag().equals("chat_fragment")) {
       floatingActionButton.setVisibility(View.INVISIBLE); // or visible
     } else {
        super.onBackPressed();
    }
}
getFragmentManager().addOnBackStackChangedListener(
    new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            int count = getFragmentManager().getBackStackEntryCount();

            if (count == 0) {
                floatingActionButton.show();
            } else {
                floatingActionButton.hide();
            }
        }
    }
);

onBackStachChanged is called both when adding and stack, or removing. 添加,堆叠或删除时均会调用onBackStachChanged。
So i'm just checking if there's already one, or not. 所以我只是检查是否已经有一个。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何仅对一个片段进行回压操作而不是从backStack弹出,而对于其他片段仍然应该能够正常工作? - How to do something on back press instead of pop from backStack just for one fragment and still should able to work normally for other fragments? 如何从片段返回到前一个片段? - How do I get back from a fragment to a previous fragment? 开关回到关闭 - Switch goes back to off 如何等待所有asyn请求返回并执行某些操作? - How to wait for all asyn requests to come back and then do something? 如何使我单击的内容在进入页面中链接的另一个网站之前淡出并淡入? - How do I make something I click fade out and in before it goes to another website linked in the page? 片段在最后一个片段后面可见并继续 - Fragment visible behind last fragment and goes on 在“活动”中单击“片段” - Clicking on Fragment goes through in Activity 如何在警报对话框和片段之间进行通信? - How do I communicate between alert dialog back to my fragment? 从webview片段导航到不同的片段后,如何在webview中返回? - How do I go back within webview after navigation to a different fragment from the webview fragment? 我的代码在没有任何指令的情况下执行整个后返回执行先前的方法 - My code goes back to execute previous method after executing the whole without any instruction to do that
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM