在Fragment上做些什么可以追溯

时间:2016-09-08 12:08:44

标签: java android

我有代码在click事件上添加片段。这可以工作,然后按钮从显示中删除,但我希望按钮在用户按下时显示,并保留片段。像onBackStackUsed这样的东西。

我试图找到类似的东西,但我无法找到办法。它甚至可能吗?

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

    }
});

4 个答案:

答案 0 :(得分:1)

我认为你想要的是在你的活动中实现onBackPressed。以下是一些方法How to implement onBackPressed() in Fragments?

答案 1 :(得分:0)

覆盖Activity中的onBackPress()方法并按如下方式进行管理:

D

快乐编码:)

答案 2 :(得分:0)

在活动中覆盖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();
    }
}

答案 3 :(得分:0)

getFragmentManager().addOnBackStackChangedListener(
    new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            int count = getFragmentManager().getBackStackEntryCount();

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

在添加和堆叠或删除时都会调用onBackStachChanged 所以我只是检查是否已经有一个。