Triển Thanh Thanh Điều Hướng Đáy Trong Ứng Dụng Mua Sắm Android

Các Công Nghệ Chính Được Sử Dụng

  • Thành phần điều hướng BottomNavigationView
  • Bố cục tương đối RelativeLayout
  • >Xử lý sự kiện lắng nghe cho BottomNavigationView
  • Sử dụng Fragment để quản lý giao diện

Quy Trình Triển Khai

1. Tạo Layout activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/mainContainer"
        android:layout_width="match_parent"
        android:layout_above="@id/bottomNav"
        android:layout_height="match_parent"/>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottomNav"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        app:menu="@menu/bottom_menu"
        android:layout_height="wrap_content"/>

</RelativeLayout>

Để tạo file menu điều hướng, tạo trong thư mục res/menu/bottom_menu.xml

2. Triển khai MainActivity.java

public class MainActivity extends AppCompatActivity {

    private TrangChuFragment trangChuFragment;
    private GioHangFragment gioHangFragment;
    private DonHangFragment donHangFragment;
    private CaNhanFragment caNhanFragment;

    private BottomNavigationView bottomNavigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Khởi tạo điều khiển
        bottomNavigationView = findViewById(R.id.bottomNav);
        
        // Thiết lập sự kiện chọn mục
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.menu_home:
                        hienThiFragment(0);
                        break;
                    case R.id.menu_cart:
                        hienThiFragment(1);
                        break;
                    case R.id.menu_orders:
                        hienThiFragment(2);
                        break;
                    case R.id.menu_profile:
                        hienThiFragment(3);
                        break;
                }
                return true;
            }
        });

        // Mặc định hiển thị trang chủ
        hienThiFragment(0);
    }

    private void hienThiFragment(int viTri) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        anTatCaFragment(fragmentTransaction);

        switch (viTri) {
            case 0:
                if (trangChuFragment == null) {
                    trangChuFragment = new TrangChuFragment();
                    fragmentTransaction.add(R.id.mainContainer, trangChuFragment);
                } else {
                    fragmentTransaction.show(trangChuFragment);
                }
                break;
            case 1:
                if (gioHangFragment == null) {
                    gioHangFragment = new GioHangFragment();
                    fragmentTransaction.add(R.id.mainContainer, gioHangFragment);
                } else {
                    fragmentTransaction.show(gioHangFragment);
                    gioHangFragment.capNhatDuLieu();
                }
                break;
            case 2:
                if (donHangFragment == null) {
                    donHangFragment = new DonHangFragment();
                    fragmentTransaction.add(R.id.mainContainer, donHangFragment);
                } else {
                    fragmentTransaction.show(donHangFragment);
                    donHangFragment.capNhatDuLieu();
                }
                break;
            case 3:
                if (caNhanFragment == null) {
                    caNhanFragment = new CaNhanFragment();
                    fragmentTransaction.add(R.id.mainContainer, caNhanFragment);
                } else {
                    fragmentTransaction.show(caNhanFragment);
                }
                break;
        }

        // Luôn commit giao dịch
        fragmentTransaction.commit();
    }

    private void anTatCaFragment(FragmentTransaction fragmentTransaction) {
        if (trangChuFragment != null) {
            fragmentTransaction.hide(trangChuFragment);
        }
        if (gioHangFragment != null) {
            fragmentTransaction.hide(gioHangFragment);
        }
        if (donHangFragment != null) {
            fragmentTransaction.hide(donHangFragment);
        }
        if (caNhanFragment != null) {
            fragmentTransaction.hide(caNhanFragment);
        }
    }
}

Việc sử dụng Fragment trong MainActivity giúp quản lý hiệu quả các màn hình chuyển đổi trong ứng dụng, đặc biệt là với cấu trúc điều hướng như bottom navigation.

Thẻ: Android BottomNavigationView Fragment RelativeLayout Java

Đăng vào ngày 23 tháng 5 lúc 02:29