Recyclerview фрагмента onCreateView, onViewCreated или onActivityCreated?

Должен ли я инициализировать свой просмотрщик в onCreateView, onViewCreated или onActivityCreated?

В чем разница между этими 3, я искал объяснения, но некоторые люди говорят, что использовать onCreateView, а некоторые говорят, что использовать onViewCreated или onActivityCreated И только использовать onCreateView для раздувания макета?

Это мой код

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_tab1, container, false);

    recyclerViewSongs = rootView.findViewById(R.id.recyclerViewSongs);

    initRecyclerView();

    Log.e(TAG, "onCreateView called!");

    return rootView;

}

private void initRecyclerView() {
    Main.musicList = Main.songs.songs;

    // Connects the song list to an adapter
    // (Creates several Layouts from the song list)
    allSongsAdapter = new AllSongsAdapter(getContext(), Main.musicList);

    final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());

    recyclerViewSongs.setLayoutManager(linearLayoutManager);
    recyclerViewSongs.setHasFixedSize(true);
    recyclerViewSongs.setAdapter(allSongsAdapter);

    recyclerViewSongs.addOnItemTouchListener(new OnItemClickListeners(getContext(), new OnItemClickListeners.OnItemClickListener() {
            @TargetApi(Build.VERSION_CODES.O)
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(getContext(), "You Clicked position: " + position, Toast.LENGTH_SHORT).show();
                if (! Main.songs.isInitialized())
                    return;
                //Start playing the selected song.
                playAudio(position);
            }
        }));

}

2 ответа

Решение

onCreateView() будет лучшим выбором, так как вы используете Fragment, Разница в том, onCreateView() это Fragment эквивалент onCreate() для деятельности и работает в течение View создание но onViewCreated() бежит за View был создан.

А также onActivityCreated() звонки после onCreate() метод Activity завершает, как вы можете увидеть здесь: /questions/30950303/razlichiya-i-ispolzovanie-oncreate-oncreateview-i-onactivitycreated-vo-fragmentah/30950308#30950308

Наилучший уровень для установки RecyclerView - это onCreateView(), который эквивалентен onCreate() в случае Activity, потому что RecyclerView должен быть быстрым, чтобы не замедлять работу пользовательского интерфейса. Следовательно, RecyclerView в onViewCreated() замедлит работу пользовательского интерфейса перед его заполнением.

Другие вопросы по тегам