本文共 4426 字,大约阅读时间需要 14 分钟。
在Android开发中,通过Fragment与BottomNavigationView实现底部导航栏是一种常见的布局方式。本文将从创建项目、设置导航栏内容到实现页面切换的过程详细说明,帮助开发者轻松构建有底部导航栏的Fragment应用。
首先,确保项目中已经正确配置了Android支持库。Oak中,添加以下依赖项确保版本与现有项目一致:
implementation 'com.android.support:design:28.0.0'implementation 'com.android.support:support-vector-drawable:28.0.0'
接下来,创建或者重复使用名为menu
的资源文件夹,并在其中添加底部导航栏对应的菜单文件navigation.xml
。在菜单文件中,定义各导航选项的显示内容,例如:
下一步,创建主布局文件start_for_fragment.xml
。在布局文件中,添加占位布局和底部导航栏。例代码如下:
这里,LinearLayout
用于占位,BottomNavigationView
控制底部导航栏的显示内容。
为实现页面切换功能,需要创建三组Fragment对应底部导航栏的每个选项。以fragment1.xml
为例,示例代码如下:
类似地,分别创建fragment2.xml
和fragment3.xml
。
创建Fragment
类并加载相应布局文件。以Fragment1.java
为例:
package mystudy.kjpc.fragement;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;public class Fragment1 extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment1, container, false); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); }}
继续创建导航活动类StartForFActivity.java
,实现Fragment的切换功能。代码示例如下:
package mystudy.kjpc.fragement;import android.os.Bundle;import android.support.annotation.NonNull;import android.support.design.widget.BottomNavigationView;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentTransaction;import android.support.v7.app.AppCompatActivity;import android.view.MenuItem;public class StartForFActivity extends AppCompatActivity { private BottomNavigationView bottomNavigationView; private Fragment1 fragment1; private Fragment2 fragment2; private Fragment3 fragment3; private Fragment[] fragments; private int lastFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.start_for_framment); initFragment(); } private void initFragment() { fragment1 = new Fragment1(); fragment2 = new Fragment2(); fragment3 = new Fragment3(); fragments = new Fragment[]{fragment1, fragment2, fragment3}; lastFragment = 0; getSupportFragmentManager().beginTransaction() .replace|R.id.lin_lay_fragment , fragment1) .show(fragment1) .commit(); bottomNavigationView = findViewById(R.id.bnv); bottomNavigationView.setOnNavigationItemSelectedListener(changeFragment); } private BottomNavigationView.OnNavigationItemSelectedListener changeFragment = new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.home_page: if (lastFragment != 0) { switchFragment(lastFragment, 0); lastFragment = 0; } return true; case R.id.setting: if (lastFragment != 1) { switchFragment(lastFragment, 1); lastFragment = 1; } return true; case R.id.mycenter: if (lastFragment != 2) { switchFragment(lastFragment, 2); lastFragment = 2; } return true; } return false; } }; private void switchFragment(int lastFragment, int index) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.hide(fragments[lastFragment]); if (!fragments[index].isAdded()) { transaction.add(R.id.lin_lay_fragment, fragments[index]); } transaction.show(fragments[index]) .commitAllowingStateLoss(); }}
到这里,底部导航栏和Fragment切换功能均已完成。运行项目,点击导航栏各选项即可切换显示不同的 Fragment内容。
整个实现过程注重细节,通过合理配置和灵活扩展,能够快速集成满足需求的功能模块。
转载地址:http://vvjhz.baihongyu.com/