【问题标题】:How do handle onBackPressed() in Fragment? [duplicate]如何处理 Fragment 中的 onBackPressed()? [复制]
【发布时间】:2016-12-15 13:30:18
【问题描述】:
这是我的班级名称
public class PrimaryFragment extends Fragment implements OnRestartRequest {
@Override
public void onBackPressed() {
if (mCardStackLayout.isCardSelected()) {
mCardStackLayout.restoreCards();
} else {
super.onBackPressed();
}
}
此行出错:super.onBackPressed();
我不知道片段类的后按按钮有什么问题。
【问题讨论】:
标签:
android
android-fragments
onbackpressed
【解决方案1】:
Fragment 中没有 onBackPressed() 方法。你可以做一些事情,比如从你的Fragment 调用getActivity().onBackPressed()。
【解决方案2】:
片段没有 onBackPress() 方法,因为我们有活动。我更喜欢使用下面的代码来处理背压,希望它对你有所帮助:
private void handleBackPress(View view) {
view.setFocusableInTouchMode(true);
view.requestFocus();
view.setOnKeyListener( new View.OnKeyListener()
{
@Override
public boolean onKey( View v, int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
cancelCountDownTimerAndSaveValues();
if (Constants.Fragments.CurrentFragment != null)
{
getActivity().getSupportFragmentManager().popBackStack();
}
return true;
}
return false;
}
} );
}
这里的视图是您从
获得的片段的主要视图
View view = inflater.inflate(R.layout.xxxxx, container, false);
【解决方案3】:
你应该像这样从片段内部调用getActivity():
getActivity().onBackedPressed();
注意:注意你导入正确的getActivity(),如果你使用android.support.v4.app.Fragment你需要导入正确的包。
【解决方案4】:
Fragmetns 没有自己的OnBackPressed,您必须从包含该片段的父 Actvitiy 处理他们的事务。
示例://在 Fragmetn 上的父 Activity 中
@Override
public void onBackPressed() {
// This will get you total fragment in the backStack
int count = getFragmentManager().getBackStackEntryCount();
switch(count){
case 0:
super.onBackPressed();
break;
case 1:
// handle back press of fragment one
break;
case 2:
// and so on for fragment 2 etc
break;
default:
getFragmentManager().popBackStack();
break;
}
}