片段:按下后退按钮并自定义时调用的回调

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)