Fragment与ViewPager联动实现底部导航功能
实现底部导航栏与ViewPager的联动效果,主要包含以下三个核心模块:
- 主界面布局设计
- Fragment适配器开发
- 按钮状态同步机制
public class MyFragmentPagerAdapter extends FragmentStateAdapter {
private List<Fragment> fragmentsList = new ArrayList<>();
public MyFragmentPagerAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, List<Fragment> fragments) {
super(fragmentManager, lifecycle);
this.fragmentsList = fragments;
}
@NonNull
@Override
public Fragment createFragment(int position) {
return fragmentsList.get(position);
}
@Override
public int getItemCount() {
return fragmentsList.size();
}
}
private void initPager() {
ViewPager2 viewPager = findViewById(R.id.viewpager);
ArrayList<Fragment> fragmentList = new ArrayList<>();
fragmentList.add(BlankFragment.create("微信聊天"));
fragmentList.add(BlankFragment.create("通讯录"));
fragmentList.add(BlankFragment.create("朋友圈"));
fragmentList.add(BlankFragment.create("个人中心"));
MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(
getSupportFragmentManager(),
getLifecycle(),
fragmentList
);
viewPager.setAdapter(adapter);
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
updateTabIndicator(position);
}
});
}
private void initTabs() {
View tabChat = findViewById(R.id.tab_chat);
View tabContact = findViewById(R.id.tab_contact);
View tabFind = findViewById(R.id.tab_find);
View tabProfile = findViewById(R.id.tab_profile);
tabChat.setSelected(true);
currentTab = tabChat;
tabChat.setOnClickListener(v -> {
viewPager.setCurrentItem(0, false);
updateTabState(tabChat);
});
// 其他按钮的初始化和点击事件类似
}
private void updateTabIndicator(int position) {
if (currentTab != null) {
currentTab.setSelected(false);
}
switch (position) {
case 0:
updateTabState(findViewById(R.id.tab_chat));
break;
case 1:
updateTabState(findViewById(R.id.tab_contact));
break;
case 2:
updateTabState(findViewById(R.id.tab_find));
break;
case 3:
updateTabState(findViewById(R.id.tab_profile));
break;
}
}
private void updateTabState(View tab) {
tab.setSelected(true);
currentTab = tab;
}
public class BlankFragment extends Fragment {
private static final String ARG_TITLE = "title";
private View rootView;
private String pageTitle;
public static BlankFragment create(String title) {
BlankFragment fragment = new BlankFragment();
Bundle args = new Bundle();
args.putString(ARG_TITLE, title);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (rootView == null) {
rootView = inflater.inflate(R.layout.fragment_blank, container, false);
}
initView();
return rootView;
}
private void initView() {
TextView titleView = rootView.findViewById(R.id.title_text);
pageTitle = getArguments().getString(ARG_TITLE);
titleView.setText(pageTitle);
}
}
