0

当我注意到这个问题时,我正在开发一个代码变得相当大的应用程序,所以我制作了一个测试应用程序,其中包含一个底部导航栏,其中包含主要活动和三个片段(F1、F2、F3)并使用导航组件进行设置。我记录了第一个片段的生命周期事件,如下所示,这就是我得到的:

public class F1 extends Fragment {

    private OnFragmentInteractionListener mListener;
    private static final String TAG = "F1";
    public F1() {
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate: ");

    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d(TAG, "onActivityCreated: ");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.d(TAG, "onDetach: ");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        Log.d(TAG, "onCreateView: ");
        return inflater.inflate(R.layout.fragment_f1, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Log.d(TAG, "onViewCreated: ");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.d(TAG, "onDestroyView: ");
    }

    public interface OnFragmentInteractionListener {
        // TODO: Update argument type and name
        void onFragmentInteraction(Uri uri);
    }
}

从 f1 导航到 f2 时,logcat:

2019-09-22 14:11:34.648 6580-6580/com.example.navtest D/F1: onStop: 
2019-09-22 14:11:34.648 6580-6580/com.example.navtest D/F1: onDestroyView:

使用导航栏从 f2 导航回 f1 时:

2019-09-22 14:12:41.406 6580-6580/com.example.navtest D/F1: onCreate: 
2019-09-22 14:12:41.406 6580-6580/com.example.navtest D/F1: onCreateView: 
2019-09-22 14:12:41.408 6580-6580/com.example.navtest D/F1: onViewCreated: 
2019-09-22 14:12:41.408 6580-6580/com.example.navtest D/F1: onActivityCreated: 
2019-09-22 14:12:41.408 6580-6580/com.example.navtest D/F1: onStart: 
2019-09-22 14:12:41.408 6580-6580/com.example.navtest D/F1: onResume: 
2019-09-22 14:12:41.410 6580-6580/com.example.navtest D/F1: onDestroy: 
2019-09-22 14:12:41.410 6580-6580/com.example.navtest D/F1: onDetach: 

有人可以解释一下这种行为吗?应用程序正常工作,片段可见且功能正常,那么为什么要调用 onDestory/onDetach?可能是错误还是什么?我在这两个项目中都有它,它们之间的共同点是我如何在主要活动中设置底部应用程序栏,这是正常的方式,但无论如何我都会发布它:

NavController navController = Navigation.findNavController(this, R.id.navHostFragment);
BottomNavigationView appBar = findViewById(R.id.appBar);
NavigationUI.setupWithNavController(appBar, navController);

编辑: 上面测试的片段一是起始目的地,记录片段二一切似乎正常,只有当我分配它(片段2)时,起始目的地片段一按预期运行,片段二显示奇怪的行为。我认为这个问题专门针对起始目标片段。

4

1 回答 1

1

您是否检查了两个片段上的“TAG”?....您可能在 F1 和 F2 片段上都为 TAG 赋予了 F1 值...

在任何其他情况下,不会出现这种行为......因此,如果您的应用没有遇到任何问题,那么 TAG 可能只是这种情况

于 2019-09-22T12:14:03.173 回答