相关视频教程在某站上面(🔍浩宇软件开发)
1. 涉及到的技术点
- 底部导航控件BottomNavigationView的使用
- 相对布局RelativeLayout的使用
- BottomNavigationView的监听事件处理
- Fragment的使用
2. 代码实现过程
- 主页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/content"
android:layout_width="match_parent"
android:layout_above="@id/bottomNavigationView"
android:layout_height="match_parent"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
app:menu="@menu/navigation"
android:layout_height="wrap_content"/>
</RelativeLayout>
app:menu="@menu/navigation"如何创建?res->menu->navigation.xml,如下图所示
- 主页MainActivity.java
public class MainActivity extends AppCompatActivity {
private HomeFragment mHomeFragment;
private CarFragment mCarFragment;
private OrderFragment mOrderFragment;
private MineFragment mMineFragment;
private BottomNavigationView mBottomNavigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
mBottomNavigationView = findViewById(R.id.bottomNavigationView);
//mBottomNavigationView设置点击事件
mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == R.id.home) {
selectedFragment(0);
} else if (item.getItemId() == R.id.car) {
selectedFragment(1);
} else if (item.getItemId() == R.id.order) {
selectedFragment(2);
} else {
selectedFragment(3);
}
return true;
}
});
//默认首页选中
selectedFragment(0);
}
private void selectedFragment(int position) {
//获取Fragment管理器
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
hideFragment(fragmentTransaction);
if (position == 0) {
if (mHomeFragment == null) {
mHomeFragment = new HomeFragment();
fragmentTransaction.add(R.id.content, mHomeFragment);
} else {
fragmentTransaction.show(mHomeFragment);
}
} else if (position == 1) {
if (mCarFragment == null) {
mCarFragment = new CarFragment();
fragmentTransaction.add(R.id.content, mCarFragment);
} else {
fragmentTransaction.show(mCarFragment);
mCarFragment.loadData();
}
} else if (position == 2) {
if (mOrderFragment == null) {
mOrderFragment = new OrderFragment();
fragmentTransaction.add(R.id.content, mOrderFragment);
} else {
fragmentTransaction.show(mOrderFragment);
mOrderFragment.loadData();
}
} else {
if (mMineFragment == null) {
mMineFragment = new MineFragment();
fragmentTransaction.add(R.id.content, mMineFragment);
} else {
fragmentTransaction.show(mMineFragment);
}
}
//一定要提交
fragmentTransaction.commit();
}
private void hideFragment(FragmentTransaction fragmentTransaction) {
if (mHomeFragment != null) {
fragmentTransaction.hide(mHomeFragment);
}
if (mCarFragment != null) {
fragmentTransaction.hide(mCarFragment);
}
if (mOrderFragment != null) {
fragmentTransaction.hide(mOrderFragment);
}
if (mMineFragment != null) {
fragmentTransaction.hide(mMineFragment);
}
}
}
在MainActivity中,使用到了4个Fragment页面,那么为什么要使用Fragment呢?
在我们开发过程中,类似于底部导航页面之间的切换,都是采用Fragment去实现的