>我在导航抽屉活动中有片段(A,B,C(,子片段(A2,A3,B2,B3(分别到片段A和B。 我需要它们像这样工作:1( A -> B -> C -> B. 当我按下后退按钮时,我需要返回 A。也就是说,片段 A 是主要的 2( A-> A2-> A3 当我按下后退按钮时,我需要返回 A2,然后返回 A。我尝试使用 addToBackStack((,它对第二个示例有帮助,但对第一个示例没有帮助。所以,帮助我,非常感谢((( (对不起,我的英语听不懂(
第1 步。制作一个这样的界面
public interface HostInterface {
void changeCurrentFragmentTo(int currentFragmentId, Bundle bundle);
}
implement it in your Main Activity.
第 2 步。在你的片段中
private HostInterface hostInterface;
@Override
public void onAttach(Context context) {
super.onAttach(context);
hostInterface = (HostInterface) context;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (getView() != null) {
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
**hostInterface.changeCurrentFragmentTo(yorfragment,null);**
return true;
}
}
return false;
}
});
}
}
第 3 步。现在你接到了Activity
的回电。根据您的Requirement
致电New Fragment
您可以使用FragmentManager直接处理要显示或隐藏的片段。
var newFragmentTag = typeof(NewFragment).Name;
var newFragment = FragmentManager.FindFragmentByTag(newFragmentTag);
if(newFragment != null)
{
FragmentManager.BeginTransaction().Hide(currentFragment).Show(newFragment).Commit();
}
else
{
// new Instance of newFragment and hide/show ...
}