Java 按后退按钮查看片段
我有一个Java 按后退按钮查看片段,java,android,android-fragments,Java,Android,Android Fragments,我有一个main活动,有两个片段a和B。片段a打开片段B 片段B中有4个(a、B、c、d)视图,每个视图加载相应的xml。当我有三种观点时,a,b,c 按下后退按钮,我进入片段A,这很好。但当我在视图“d”中并按下“后退”按钮时,我必须转到视图“c” 而不是片段A。我如何实现这个场景 我的MainActivity有onBackPressed()方法,它看起来像这样- for (Fragment frag : fm.getFragments()) { if (frag !
main活动
,有两个片段a和B。片段a打开片段B
片段B中有4个(a、B、c、d)视图,每个视图加载相应的xml。当我有三种观点时,a,b,c
按下后退按钮,我进入片段A,这很好。但当我在视图“d”中并按下“后退”按钮时,我必须转到视图“c”
而不是片段A。我如何实现这个场景
我的MainActivity有onBackPressed()
方法,它看起来像这样-
for (Fragment frag : fm.getFragments()) {
if (frag != null && frag.isVisible()) {
FragmentManager childFm = frag.getChildFragmentManager();
if (childFm.getBackStackEntryCount() > 0) {
childFm.popBackStack();
return;
}
}
}
if (fm.getBackStackEntryCount() > 1) {
fm.popBackStack();
} else {
super.onBackPressed();
finish();
}
当您要查看-D时,将布尔变量设为true,然后在backbutton上按,检查该布尔值是否为true,然后显示View-C
@Override
public void onBackPressed() {
if (isViewD_Visible) {
// show View-C
isViewD_Visible = false;
}else {
// ...
}
}
如果您需要实现这一点,您必须监听片段中的back press事件
public class MyFragment extends Fragment implements BackPressListener {
@Override
public void onAttach(Context context) {
super.onAttach(context);
if(context instanceof MainActivity)
((MainActivity) context).setBackPressListener(this);
}
@Override
public void onBackPressed() {
//handle your back press event here
}
@Override
public void onDestroy() {
super.onDestroy();
if(getActivity() instanceof MainActivity)
((MainActivity)getActivity()).setBackPressListener(null);
}
}
首先,为back press回调创建一个接口
public interface BackPressListener {
void onBackPressed();
}
第二,像这样配置您的活动
public class MainActivity extends AppCompatActivity {
private BackPressListener backPressListener;
public void setBackPressListener(BackPressListener backPressListener) {
this.backPressListener = backPressListener;
}
@Override
public void onBackPressed() {
if (backPressListener != null)
backPressListener.onBackPressed();
else super.onBackPressed();
}
}
第三,听片段中的反压事件
public class MyFragment extends Fragment implements BackPressListener {
@Override
public void onAttach(Context context) {
super.onAttach(context);
if(context instanceof MainActivity)
((MainActivity) context).setBackPressListener(this);
}
@Override
public void onBackPressed() {
//handle your back press event here
}
@Override
public void onDestroy() {
super.onDestroy();
if(getActivity() instanceof MainActivity)
((MainActivity)getActivity()).setBackPressListener(null);
}
}
您在做错事在这里,您可能会在较小的设备上遇到类似的问题,您的要求是返回b,如果您按下c 您应该考虑使用片段而不是线性布局,您可以使用
getChildFragmentManager()
在片段内部添加子片段。在添加子片段时,您还可以提到addToBackStack。然后安卓系统将自行处理
e、 g
a、b、c和d也是片段实例吗?它们基本上是线性布局视图,它们的容器是可见的,主容器是可见的。这给了我错误的循环继承,因为我的片段是如何循环继承的。我认为你做错了什么。发布你的错误信息是我的错误。。。我解决了这个问题,但我不确定在onBackPressed()中,我必须做什么才能转到视图C检查A、B、C、D视图的可见性。如果D可见,则必须更改可见性。否则,您必须调用popBackStack()对其进行投票并将其标记为正确答案。快乐编码:)