我有一个MainActivity
,其中包含2个片段A和B.片段A打开片段B.
片段B中有4个(a,b,c,d)视图,每个视图加载相应的xml。当我在我的3个观点中时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();
}
答案 0 :(得分:1)
如果你需要实现这一目标,你必须回听片段中的新闻事件。
首先,为back press callback创建一个接口。
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);
}
}
答案 1 :(得分:0)
当您要进入View-D时,将布尔变量设为true,然后按下按钮,检查该布尔值是否为true,然后显示视图-C。
vector <- c("l","e","s","k","c","w","a","o","f","t","o","r","v")
index <- c(11,8,1,5,4,13,3,6,10,2,12,9,7)
答案 2 :(得分:0)
你做错了这里,你可能会遇到类似的问题,你要求的是如果按回c 那么转到b
您应该考虑使用片段而不是LinearLayouts ,您可以使用getChildFragmentManager()
在片段中添加子片段。添加子片段时,您也可以提到addToBackStack。然后Android系统将自行处理。
e.g。
getChildFragmentManager().beginTransaction()
.replace(R.id.fragment_container, fragment, tag)
.addToBackStack(tag)
.commit()