我有一个片段:
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
课程)
答案 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
,它是现有FragmentActivity
和AppCompatActivity
的新基类。
您现在可以通过OnBackPressedCallback
注册addOnBackPressedCallback
来接收onBackPressed
()回调,而无需在活动中覆盖该方法。