片段:按下按钮时调用的回调&定制它

时间:2012-03-14 14:05:30

标签: android android-layout android-intent android-emulator android-fragments

我有一个片段:

public class MyFragment extends Fragment{
     ...
     @Override
     public View onCreateView(...){...}    
     ...
}

我实例化它:

MyFragment myFragment = new MyFragment();

我使用上面的片段替换当前片段:

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

现在,屏幕上显示myFragment。注意:我没有将myFragment添加到后筹码

我的两个问题:

1。如果现在,我按手机返回按钮,将调用哪个片段的生命周期回调?

2. 如何在MyFragment课程中自定义后退按钮点击监听器? (请不要建议我做myFragment.getView().setOnclickListener,而是在MyFragment课程)

2 个答案:

答案 0 :(得分:22)

问题1:见http://developer.android.com/reference/android/app/Fragment.html#Lifecycle

  
    

“由于片段不再使用,它​​会经历一系列反向回调:

         

onPause() - 片段不再与用户交互,因为其活动正在暂停或片段操作是     在活动中修改它。

         

onStop() - 片段对用户不再可见,因为它的活动正在停止或片段操作正在修改它     在活动中。

         

onDestroyView() - 允许片段清理与其View相关联的资源。

         

onDestroy() - 调用以对片段的状态进行最终清理。

         

onDetach() - 在片段之前立即调用,不再与其活动相关联。“

  

问题2:如果您必须知道正在触发回调的后退按钮 ,您可以在Fragment的活动中捕获后退按钮并使用你自己的方法来处理它:

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
    }
}

答案 1 :(得分:0)

androidx.activity 1.0.0-alpha01已发布,并引入了ComponentActivity,它是现有FragmentActivityAppCompatActivity的新基类。

您现在可以通过OnBackPressedCallback注册addOnBackPressedCallback来接收onBackPressed()回调,而无需在活动中覆盖该方法。