<com.geniusphone.xdd.weight.NoScrollViewPager
android:id="@+id/vp_home_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="match_parent"
android:layout_height="50dp"
app:elevation="15dp"
android:background="#fff"
app:itemIconSize="21dp"
app:itemTextColor="@color/home_tab_text_color"
app:menu="@menu/home_bottom_tab" />
homeNavView = findViewById(R.id.bottomNavigationView);
mViewPager = findViewById(R.id.vp_home_pager);
homeNavView.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
homeNavView.setItemHorizontalTranslationEnabled(false);
homeNavView.setItemIconTintList(null);
homeNavView.setSelectedItemId(R.id.item_home);
private void setDefaultFragment() {
mPagerAdapter = new BaseFragmentAdapter<>(this);
mPagerAdapter.addFragment(HomeFragment.newInstance());
mPagerAdapter.addFragment(FindFragment.newInstance());
mPagerAdapter.addFragment(MineFragment.newInstance());
mViewPager.setAdapter(mPagerAdapter);
mViewPager.setOffscreenPageLimit(mPagerAdapter.getCount());
}
homeNavView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
fragmentManager = getSupportFragmentManager();
transaction = fragmentManager.beginTransaction();
switch (item.getItemId()) {
case R.id.item_home:
mPagerAdapter.setCurrentItem(HomeFragment.class);
return true;
case R.id.item_find:
mPagerAdapter.setCurrentItem(FindFragment.class);
return true;
case R.id.item_mine:
mPagerAdapter.setCurrentItem(MineFragment.class);
return true;
default:
break;
}
return false;
}
});
@Override
public void onSoftKeyboardOpened(int keyboardHeight) {
homeNavView.setVisibility(View.GONE);
}
@Override
public void onSoftKeyboardClosed() {
homeNavView.setVisibility(View.VISIBLE);
}
@Override
protected void onDestroy() {
mViewPager.setAdapter(null);
homeNavView.setOnNavigationItemSelectedListener(null);
super.onDestroy();
}
public class BaseFragmentAdapter<F extends Fragment> extends FragmentPagerAdapter {
private final List<F> mFragmentSet = new ArrayList<>();
private F mCurrentFragment;
private ViewPager mViewPager;
public BaseFragmentAdapter(FragmentActivity activity) {
this(activity.getSupportFragmentManager());
}
public BaseFragmentAdapter(Fragment fragment) {
this(fragment.getChildFragmentManager());
}
public BaseFragmentAdapter(FragmentManager manager) {
this(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
public BaseFragmentAdapter(FragmentManager manager, int behavior) {
super(manager, behavior);
}
@NonNull
@Override
public F getItem(int position) {
return mFragmentSet.get(position);
}
@Override
public int getCount() {
return mFragmentSet.size();
}
@SuppressWarnings("unchecked")
@Override
public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
if (getCurrentFragment() != object) {
mCurrentFragment = (F) object;
}
super.setPrimaryItem(container, position, object);
}
public void addFragment(F fragment) {
mFragmentSet.add(fragment);
}
public List<F> getAllFragment() {
return mFragmentSet;
}
public F getCurrentFragment() {
return mCurrentFragment;
}
@Override
public void startUpdate(@NonNull ViewGroup container) {
super.startUpdate(container);
if (container instanceof ViewPager) {
mViewPager = (ViewPager) container;
}
}
public void setCurrentItem(Class<? extends F> clazz) {
for (int i = 0; i < mFragmentSet.size(); i++) {
if (mFragmentSet.get(i).getClass() == clazz) {
setCurrentItem(i);
break;
}
}
}
public void setCurrentItem(int position) {
if (mViewPager != null) {
mViewPager.setCurrentItem(position);
}
}
public void setCurrentItem(int position, boolean smoothScroll) {
if (mViewPager != null) {
mViewPager.setCurrentItem(position, smoothScroll);
}
}
}
public final class NoScrollViewPager extends ViewPager {
public NoScrollViewPager(Context context) {
super(context);
}
public NoScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return false;
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent ev) {
return false;
}
@Override
public boolean executeKeyEvent(@NonNull KeyEvent event) {
return false;
}
@Override
public void setCurrentItem(int item) {
boolean smoothScroll;
int currentItem = getCurrentItem();
if (currentItem == 0) {
smoothScroll = item == currentItem + 1;
} else if (currentItem == getCount() - 1) {
smoothScroll = item == currentItem - 1;
} else {
smoothScroll = Math.abs(currentItem - item) == 1;
}
super.setCurrentItem(item, smoothScroll);
}
public int getCount() {
PagerAdapter adapter = getAdapter();
return adapter != null ? adapter.getCount() : 0;
}
}