[英]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.