Fragment Recyclerview onCreateView、onViewCreated 或 onActivityCreated?
Fragment Recyclerview onCreateView, onViewCreated or onActivityCreated?
我应该在 onCreateView、onViewCreated 还是 onActivityCreated 中初始化我的 recyclerview?
这 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);
}
}));
}
onCreateView()
将是最佳选择,因为您使用的是 Fragment
。不同之处在于 onCreateView()
是 Fragment
等同于 onCreate()
的活动,并在 View
创建期间运行,但 onViewCreated()
在 View
创建之后运行已创建。
并且 onActivityCreated()
在 Activity
的 onCreate()
方法完成后调用,如您在此处所见:
设置 RecyclerView 的最佳级别是在 onCreateView() 中,它等同于 Activity 情况下的 onCreate(),因为 RecyclerView 需要快速以免使 UI 缓慢。因此,onViewCreated() 中的 RecyclerView 将使 UI 在填充 UI.
之前变得迟缓
我应该在 onCreateView、onViewCreated 还是 onActivityCreated 中初始化我的 recyclerview?
这 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);
}
}));
}
onCreateView()
将是最佳选择,因为您使用的是 Fragment
。不同之处在于 onCreateView()
是 Fragment
等同于 onCreate()
的活动,并在 View
创建期间运行,但 onViewCreated()
在 View
创建之后运行已创建。
并且 onActivityCreated()
在 Activity
的 onCreate()
方法完成后调用,如您在此处所见:
设置 RecyclerView 的最佳级别是在 onCreateView() 中,它等同于 Activity 情况下的 onCreate(),因为 RecyclerView 需要快速以免使 UI 缓慢。因此,onViewCreated() 中的 RecyclerView 将使 UI 在填充 UI.
之前变得迟缓