Lee*_*fin 14 android android-emulator android-intent android-layout android-fragments
我有一个片段:
public class MyFragment extends Fragment{
...
@Override
public View onCreateView(...){...}
...
}
Run Code Online (Sandbox Code Playgroud)
我实例化它:
MyFragment myFragment = new MyFragment();
Run Code Online (Sandbox Code Playgroud)
我使用上面的片段来替换当前片段:
FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// replace fragment
fragmentTransaction.replace(R.id.fragment_placeholder, myFragment, "myTag");
// NOTE: I did not add to back stack
Run Code Online (Sandbox Code Playgroud)
现在,myFragment正在屏幕上显示.注意:我没有添加myFragment到后台堆栈.
我的两个问题:
1.如果现在,我按下手机后退按钮,将调用哪个片段的生命周期回调?
2.如何在课堂上自定义后退按钮单击侦听器MyFragment?(请不要建议我这样做myFragment.getView().setOnclickListener,但是在MyFragment课堂上这样做)
Tay*_*ark 22
问题1:请参阅http://developer.android.com/reference/android/app/Fragment.html#Lifecycle:
"由于片段不再被使用,它会经历一系列相反的回调:
onPause() - 片段不再与用户交互,因为其活动正在暂停或片段操作正在活动中修改它.
onStop() - 片段对用户不再可见,因为它的活动正在停止,或者片段操作正在活动中修改它.
onDestroyView() - 允许片段清理与其View相关联的资源.
onDestroy() - 调用以对片段的状态进行最终清理.
onDetach() - 在片段之前立即调用,不再与其活动相关联."
问题2:如果你必须知道它是专门触发回调的后退按钮,你可以在Fragment的Activity中捕获后退按钮并使用你自己的方法来处理它:
public class MyActivity extends Activity
{
//...
//Defined in Activity class, so override
@Override
public void onBackPressed()
{
super.onBackPressed();
myFragment.onBackPressed();
}
}
public class MyFragment extends Fragment
{
//Your created method
public void onBackPressed()
{
//Handle any cleanup you don't always want done in the normal lifecycle
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34642 次 |
| 最近记录: |