我有一个 MainActivity
,其中包含 2 个 fragment A 和 B。 fragment A 打开 fragment B。
fragment B 中有 4 个(a、b、c、d) View ,每个 View 加载相应的 xml。当我有 3 个观点 a、b、c 时 然后按后退按钮,我转到 fragment A,这很好。但是当我在 View “d”中并按后退按钮时,我必须转到 View “c” 而不是 fragment 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();
}
最佳答案
如果您需要实现此目的,您必须在 fragment 中监听新闻事件。
首先,创建一个用于后按回调的接口(interface)。
public interface BackPressListener {
void onBackPressed();
}
其次,像这样配置您的 Activity 。
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();
}
}
第三,监听fragment中的后按事件。
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);
}
}
关于java - 按后退按钮可在 fragment 中查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48210971/