实现底部导航栏切换
将java文件return的xml文件赋值给页面FrameLayout控件
java文件BottomNavigationView,监听器setOnNavigationItemSelectedListener
MainActivity.java代码
package com.example.myapplication;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import com.google.android.material.bottomnavigation.BottomNavigationView;
public class MainActivity extends AppCompatActivity {
private BottomNavigationView bottomNavigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
bottomNavigationView = findViewById(R.id.bottom_navigation);
// 默认显示首页
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout, new HomeFragment())
.commit();
// 设置切换监听
bottomNavigationView.setOnNavigationItemSelectedListener(item -> {
Fragment selectedFragment;
switch (item.getItemId()) {
case R.id.nav_search:
selectedFragment = new SearchFragment();
break;
case R.id.nav_profile:
selectedFragment = new ProfileFragment();
break;
case R.id.nav_home:
default:
selectedFragment = new HomeFragment();
break;
}
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout, selectedFragment)
.commit();
return true;
});
}
}
HomeFragment.java代码:
package com.example.myapplication;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import java.util.zip.Inflater;
public class HomeFragment extends Fragment {
private TextView homeText;
private Button updateButton;
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
// 加载布局文件
View view = inflater.inflate(R.layout.fragment_home, container, false);
// 获取控件
homeText = view.findViewById(R.id.home_text);
updateButton = view.findViewById(R.id.update_button);
// 设置按钮点击事件
updateButton.setOnClickListener(v -> {
homeText.setText("文字已更新!");
});
return view;
}
}
ProfileFragment.java代码:
package com.example.myapplication;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
public class ProfileFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_home, container, false);
}
}
SearchFragment.java代码:
package com.example.myapplication;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
public class SearchFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_search, container, false);
}
}
activity_main4.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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 用于切换内容的 Fragment 容器 -->
<FrameLayout
android:id="@+id/frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/bottom_navigation"/>
<!-- 底部导航栏 -->
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:menu="@menu/bottom_nav_menu"/>
</RelativeLayout>
fragment_home.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/home_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是首页"
android:textSize="24sp"
android:padding="16dp" />
<Button
android:id="@+id/update_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点我更新文字" />
</LinearLayout>
fragment_search.xml代码:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="HOME 1"
android:textSize="30sp" />
在resources/menu/bottom_nav_menu.xml代码如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/nav_home"
android:title="首页"
android:icon="@android:drawable/ic_menu_view" />
<item
android:id="@+id/nav_search"
android:title="搜索"
android:icon="@android:drawable/ic_menu_search" />
<item
android:id="@+id/nav_profile"
android:title="我的"
android:icon="@android:drawable/ic_menu_myplaces" />
</menu>
运行结果:


