记账本开发进度2024.1.22

zbl040721 / 2024-02-29 / 原文

导航界面:

采用底部导航控件BottomNavigationView切换账单记录界面和账单概览界面,并通过ViewPager进行页面滑动,两个子页面采用不同的Fragment。

创建menu:

次menu即为底部导航的文字和图片效果,可使用选择器,监听选择和不被选择两种状态,改变其效果。若不设置,系统模式使用样式颜色作为高亮显示。灰色呈不被选择转台。

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item
android:id="@+id/menu_navigation_record"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/title_record" />

<item
android:id="@+id/menu_navigation_general"
android:icon="@drawable/ic_dashboard_black_24dp"
android:title="@string/title_general" />
</menu>

创建Fragment:

由于本APP只需要两个节目,故只需要创建两个fragment,然后再与nav进行绑定即可,此处仅作为标记,详细介绍如下文所示。

绑定Fragment:

/**
* Set a listener that will be notified when a bottom navigation item is selected. This listener
* will also be notified when the currently selected item is reselected, unless an {@link
* OnNavigationItemReselectedListener} has also been set.
*
* @param listener The listener to notify
* @see #setOnNavigationItemReselectedListener(OnNavigationItemReselectedListener)
*/

设置底部导航栏当前页面显示:

navView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_navigation_record:
mViewPager.setCurrentItem(0);
return true;
case R.id.menu_navigation_general:
mViewPager.setCurrentItem(1);
return true;
}
return false;
}
});

将ViewPage和两个fragment进行绑定:

private void setupViewPager(ViewPager viewPager) {
BottomAdapter adapter = new BottomAdapter(getSupportFragmentManager());
adapter.addFragment(new RecordFragment());
adapter.addFragment(new GeneralFragment());
viewPager.setAdapter(adapter);
}

并通过监听ViewPager事件进行页面切换:

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {
navView.getMenu().getItem(position).setChecked(true);
}

@Override
public void onPageScrollStateChanged(int state) {

}
});
}