我在活动onCreate
android.app.FragmentManager fragmentManager = getFragmentManager();
DeviceControlFragment newFragment = new DeviceControlFragment();
newFragment.device = device;
fragmentManager.beginTransaction()
.replace(R.id.content_frame, newFragment)
.commit();
在片段中,我可以弹出堆栈或像这样回击:
getFragmentManager().popBackStack();
OR
getActivity().onBackPressed();
但是我需要在活动中添加一些东西,以便我知道我们已经回到那里,是否有类似于onActivityResult
的东西可以在活动中覆盖以了解片段何时“完成”了
答案 0 :(得分:3)
在片段内部声明一个接口,并在您的活动中实现该接口,并在片段的onDetach()
,onDestroy
或onPaused
方法(适合您的任何一种)中向活动发送响应。我更喜欢onDetach
或onDestroy
以下是示例:
public class MyFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return super.onCreateView(inflater, container, savedInstanceState);
}
private Test mListener;
public interface Test{
void imLeavingYou();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
mListener = (Test) context;
}
@Override
public void onDetach() {
super.onDetach();
if(mListener != null){
mListener.imLeavingYou();
}
}
}
然后在您的Activity
中执行以下操作:
public class MyActivity extends AppCompatActivity implements MyFragment.Test {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
}
@Override
public void imLeavingYou() {
// Okay thanks for informing
}
}
答案 1 :(得分:2)
您可能应该在片段管理器上设置onBackStackChanged()侦听器。
示例:
getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
//here you can check stuff. like:
final Fragment mCurrentFragment = getFragmentManager().findFragmentById(R.id.container);
//or get the number of fragments currently on your stack:
getFragmentManager().getBackStackEntryCount()
}
});