Android对于Fragment的使用以及底部导航栏问题

fragment

一直提示fragment类型不对

该错误是在我们创建的fragment类文件中导错了包

底部导航栏不显示文字

在该处加上app:labelVisibilityMode="labeled"就可以全部显示了

原因:底部导航栏的类别多于三个会不显示,只会选中选中的那个。

参考:

安卓底部导航栏不显示文字问题(Kotlin)_心脏dance的博客-CSDN博客

点击底部导航栏后fragment变化但是导航栏选中的图标未发生变化

原因是导航栏监听事件要返回true,返回false的话xml文件无法接收响应。

 private BottomNavigationView.OnNavigationItemSelectedListener mon= (
            BottomNavigationView.OnNavigationItemSelectedListener) item -> {
        FragmentManager fm=getFragmentManager();
        FragmentTransaction transaction =fm.beginTransaction();
        switch (item.getItemId()){
            case R.id.navigation_shouye:
                ShouyeFragment shouyeFragment=new ShouyeFragment();
                transaction.replace(R.id.fragment,shouyeFragment);
                break;
            case R.id.navigation_xiaoxi:
                XiaoxiFragment xiaoxiFragment=new XiaoxiFragment();
                transaction.replace(R.id.fragment,xiaoxiFragment);
                break;
            case R.id.navigation_biji:
                BijiFragment bijiFragment=new BijiFragment();
                transaction.replace(R.id.fragment,bijiFragment);
                break;
            case R.id.navigation_my:
                MyFragment myFragment=new MyFragment();
                transaction.replace(R.id.fragment,myFragment);
                break;
        }
        transaction.commit();
        return true;
    };

改变选中和未选中字体大小

参考连接:

​​​​​​​Android BottomNavigationView修改导航文字大小无效的解决方法_喝烧酒的兔子的博客-CSDN博客_bottomnavigationview 字体大小

修改导航栏文字颜色

创建文件夹和文件

 select.xml加入

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#FF0000" android:state_checked="true"/>
    <item android:color="#00FF00" android:state_checked="false"/>
</selector>

在下面加入

app:itemIconTint="@color/select"
app:itemTextColor="@color/select"

就可以了

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:textAlignment="gravity"
        app:itemIconTint="@color/select"
        app:itemTextColor="@color/select"
        app:itemTextAppearanceActive="@style/bottom_tab_title_active"
        app:itemTextAppearanceInactive="@style/bottom_tab_title_inactive"
        app:labelVisibilityMode="labeled"
        app:menu="@menu/navigation" />

OnNavigationItemSelectedListener弃用问题


​​​​​​​OnNavigationItemSelectedListener方法已经被弃用,并且它和viewpager2一起用会冲突,在这里我们可以替换为setOnItemSelectedListener实现fragment切换效果

   //底部导航栏点击监听事件,在activity里面调用该方法
 private void navigation() {
        navigation.setOnItemSelectedListener(item -> {
            switch (item.getItemId()){
                case R.id.navigation_shouye:
                    viewPager2.setCurrentItem(0);
                    toolbar.setTitle("首页");
                    break;
                case R.id.navigation_xiaoxi:
                    viewPager2.setCurrentItem(1);
                    toolbar.setTitle("消息");
                    break;
                case R.id.navigation_biji:
                    viewPager2.setCurrentItem(2);
                    toolbar.setTitle("笔记");
                    break;
                case R.id.navigation_my:
                    viewPager2.setCurrentItem(3);
                    toolbar.setTitle("我的");
                    break;
            }
            return true;
        });
        navigation.setSelectedItemId(R.id.navigation_shouye);
    }

fragment监听事件

//自定义方法,通过在activity调用该方法实现监听事件
public void listen(){
                viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            /**
             * 滑动监听
             */
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
                
            }
            /**
             * 监听滑动到对应索引值的页面
             */
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                
            }
            /**
             * 滑动状态监听
             */
            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
               
            }
        });

    }

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Fragment实现底部导航的跳转,您需要执行以下步骤: 1. 在您的项目中创建一个BottomNavigationView对象,它将用于显示底部导航。 2. 创建多个Fragment类,每个类都代表底部导航的一个选项。 3. 在您的Activity类中,创建一个FragmentManager对象并使用beginTransaction()方法开始一个新的FragmentTransaction。 4. 在FragmentTransaction中,使用add()方法将您的第一个Fragment添加到Activity中。同时,将BottomNavigationView的setOnNavigationItemSelectedListener()方法定义为一个监听器,以便在用户点击底部导航时执行相应的操作。 5. 在监听器中,使用replace()方法切换到用户选择的Fragment。 以下是一个简单的示例代码,可以帮助您更好地理解如何使用Fragment实现底部导航的跳转: ``` public class MainActivity extends AppCompatActivity { private BottomNavigationView bottomNavigationView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bottomNavigationView = findViewById(R.id.bottom_navigation); // 设置默认选中项 bottomNavigationView.setSelectedItemId(R.id.navigation_home); // 设置监听器 bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { Fragment fragment; switch (menuItem.getItemId()) { case R.id.navigation_home: fragment = new HomeFragment(); break; case R.id.navigation_dashboard: fragment = new DashboardFragment(); break; case R.id.navigation_notifications: fragment = new NotificationsFragment(); break; default: return false; } getSupportFragmentManager() .beginTransaction() .replace(R.id.fragment_container, fragment) .commit(); return true; } }); } } ``` 在这个例子中,我们首先获取了一个BottomNavigationView对象,并将其与我们的布局文件关联。我们还设置了默认选中项并添加了一个监听器。 在监听器中,我们使用了一个switch语句来确定用户选择了哪个选项。然后我们创建了相应的Fragment,并使用replace()方法将其添加到Activity中。 请注意,我们使用了一个FrameLayout来承载我们的Fragment。您需要在布局文件中添加一个类似的视图,以便能够动态添加和删除Fragment。 希望这可以帮助您开始使用Fragment实现底部导航的跳转。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值