** Note: Vòng đời của Fragment
1. Tạo Class Fragment
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class FragmentLogin extends Fragment { private MainActivity mainActivity; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_login,container,false); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (getActivity() instanceof MainActivity){ mainActivity = (MainActivity) getActivity(); } initViews(); } private void initViews() { //Đoạn code xử lý thêm } } |
-- Với databinding: giả sử FragmnetSong.class + fragment_song.xml
1 2 3 4 5 6 7 8 9 10 11 |
//Tên FragmentSongBinding ứng với tên file: fragment_song.xml có sử dụng binding private FragmentSongBinding frBinding; public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { frBinding = DataBindingUtil.inflate( inflater, R.layout.fragment_song, container, false); View view = frBinding.getRoot(); return view; } |
2. FragmentManager và FragmentTransaction
-- Mỗi 1 đối tượng fragment chỉ add 1 lần.
-- Transaction sau khi commit() xong phải khai báo lại.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
private void initFragment(){ FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); //transaction.setCustomAnimations( // android.R.anim.slide_in_left, // android.R.anim.slide_out_right //); transaction.setCustomAnimations( android.R.animator.fade_in, android.R.animator.fade_out ); //remove all Fragment, and add "new Fragment()"; transaction.replace(R.id.frame_container,new Fragment()); transaction.add(R.id.frame_container, fragmentA); transaction.add(R.id.frame_container, fragmentB); transaction.add(R.id.frame_container, fragmentC); transaction.remove(fragmentC); transaction.hide(fragmentA); transaction.show(fragmentA); transaction.commit(); transaction.runOnCommit(new Runnable() { @Override public void run() { //đoạn code cần xử lý khi Commit } }); } |