2012-12-07 14 views
1

在一个片段,我有这样的:什么呢onBackPress在片段致电

onPause(){ 

super.onPause(); 
if(flag){ 
getActivity.finish(); 
}else{ 
} 
} 

onResume(){ 

flag = true; 
super.onResume(); 
} 

,并有一个按钮,就按我这个标志设置为false:

Button.onClick{ 
flag = false; 
} 

的理念是:

按钮被点击时不完成本活动。但是当设备BackButton被按下完成()。

但是这个逻辑不起作用。原因是,当我按BackButton的设备,onPause未被调用。

这是活动中的第4个片段。所以当我按下BackButton时,我可以看到第三个片段。我不想要。

我在API 10设备上使用它,但我的应用程序使用支持库v4。

谢谢。

回答

5

如果你想关闭的背面按活动,然后重写活动onBackPressed如下:

public void onBackPressed() { 
    Fragment fragment = getSupportFragmentManager().findFragmentByTag("yourfragment"); 
    if (fragment instanceOf YourFragmet) { 
      finish(); 
      return; 
    } 
    super.onBackPressed(); 
} 

如果你想关闭按钮点击的活动,那么你就可以调用

Button.onClick{ 
    getActivity().onBackPressed(); 
} 

OR

Button.onClick{ 
    getActivity().finish(); 
} 

如果在片段之间转换时,您将addToBackStack()作为FragmentTransaction的一部分调用,那么后退按钮会将您带到后端堆栈顶部的片段

+0

不,我不想**关闭活动** onButtonClicked **。我只想在** BackIsPressed时关闭活动** –

+0

更新了答案 – Nermeen

+0

我应该在** onViewCreated()**中使用它吗?与** fragment.getView **替换为**视图**参数** onViewCreated ** –

-1

为什么不能使用onDetach )片段?在按下后退键时,会在片段上调用onDetach()来移除该片段。

@Override 
public void onDetach() { 
    super.onDetach(); 
    if(flag){ 
    getActivity.finish(); 
    }else{ 
     } 
} 
+0

何时调用onDetach()?在背后弹出? –

+0

是的,当你按下backkey时,前景片段将被分离,并且之前附加的片段将被显示。 – Thiru

+0

这不起作用,并且不正确。 – Adam