Commit 3fe7234a by 段启岩

重复点击底部导航后刷新界面

parent e2b47479
......@@ -23,10 +23,11 @@ import cn.yunliyunwai.beyondclouds.ui.HomeFragment;
import cn.yunliyunwai.beyondclouds.ui.MyFragment;
import cn.yunliyunwai.beyondclouds.ui.ProjectFragment;
import cn.yunliyunwai.beyondclouds.ui.QAFragment;
import cn.yunliyunwai.beyondclouds.ui.listener.OnNavigationReselectedListener;
import cn.yunliyunwai.beyondclouds.util.StatusBarUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.MainActivityViewModel;
public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMainBinding> implements BottomNavigationView.OnNavigationItemSelectedListener {
public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMainBinding> implements BottomNavigationView.OnNavigationItemSelectedListener, BottomNavigationView.OnNavigationItemReselectedListener {
private static final String TAG = MainActivity.class.getCanonicalName();
private List<Fragment> fragments;
......@@ -75,6 +76,7 @@ public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMa
binding.bottomNavigationView.setOnNavigationItemSelectedListener(this);
binding.bottomNavigationView.setOnNavigationItemReselectedListener(this);
binding.bottomNavigationView.setItemIconTintList(null);
}
......@@ -100,6 +102,34 @@ public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMa
return true;
}
@Override
public void onNavigationItemReselected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.home_fragment:
dispatchReSelectEvent(0);
break;
case R.id.project_fragment:
dispatchReSelectEvent(1);
break;
case R.id.dynamic_fragment:
dispatchReSelectEvent(2);
break;
case R.id.qa_fragment:
dispatchReSelectEvent(3);
break;
case R.id.my_fragment:
dispatchReSelectEvent(4);
break;
}
}
private void dispatchReSelectEvent(int index) {
Fragment fragment = fragments.get(index);
if (fragment instanceof OnNavigationReselectedListener) {
((OnNavigationReselectedListener) fragment).onNavigationReselected();
}
}
private void switchFragment(int index) {
int previousIndex = binding.getViewModel().getCurrentIndex();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
......
package cn.yunliyunwai.beyondclouds.adapter.common;
import android.os.Bundle;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
......@@ -15,6 +16,7 @@ import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
public class CategoryFragmentPagerAdapter extends FragmentStatePagerAdapter {
private List<CommonCategory> categories;
private FragmentFactory factory;
private Fragment currentFragment;
public CategoryFragmentPagerAdapter(@NonNull FragmentManager fm, List<CommonCategory> categories, FragmentFactory factory) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
......@@ -33,7 +35,17 @@ public class CategoryFragmentPagerAdapter extends FragmentStatePagerAdapter {
}
@Override
public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
super.setPrimaryItem(container, position, object);
currentFragment = (Fragment) object;
}
@Override
public int getCount() {
return categories.size();
}
public Fragment getCurrentFragment() {
return currentFragment;
}
}
......@@ -22,13 +22,14 @@ import cn.yunliyunwai.beyondclouds.data.model.Post;
import cn.yunliyunwai.beyondclouds.databinding.FragmentDynamicBinding;
import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
import cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment;
import cn.yunliyunwai.beyondclouds.ui.listener.OnNavigationReselectedListener;
import cn.yunliyunwai.beyondclouds.util.CategoryViewpagerUtils;
import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.DynamicFragmentViewModel;
import cn.yunliyunwai.beyondclouds.viewmodel.DynamicListFragmentViewModel;
public class DynamicFragment extends BaseFragment<DynamicFragmentViewModel, FragmentDynamicBinding> {
public class DynamicFragment extends BaseFragment<DynamicFragmentViewModel, FragmentDynamicBinding> implements OnNavigationReselectedListener {
@Inject
ViewModelProvider.Factory factory;
......@@ -60,6 +61,11 @@ public class DynamicFragment extends BaseFragment<DynamicFragmentViewModel, Frag
}, binding.magicIndicator, binding.viewPager, viewModel, true);
}
@Override
public void onNavigationReselected() {
CategoryViewpagerUtils.forceRefresh(binding.viewPager.getAdapter());
}
public static class DynamicListFragment extends RefreshableFragment<Post, DynamicListFragmentViewModel> {
@Inject
......
......@@ -25,12 +25,13 @@ import cn.yunliyunwai.beyondclouds.data.model.Blog;
import cn.yunliyunwai.beyondclouds.databinding.FragmentHomeBinding;
import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
import cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment;
import cn.yunliyunwai.beyondclouds.ui.listener.OnNavigationReselectedListener;
import cn.yunliyunwai.beyondclouds.util.CategoryViewpagerUtils;
import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.BlogListFragmentViewModel;
import cn.yunliyunwai.beyondclouds.viewmodel.HomeFragmentViewModel;
public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHomeBinding> {
public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHomeBinding> implements OnNavigationReselectedListener {
@Inject
ViewModelProvider.Factory factory;
......@@ -75,6 +76,11 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo
}
@Override
public void onNavigationReselected() {
CategoryViewpagerUtils.forceRefresh(binding.viewPager.getAdapter());
}
public static class BlogListFragment extends RefreshableFragment<Blog, BlogListFragmentViewModel> {
@Inject
......
......@@ -25,13 +25,14 @@ import cn.yunliyunwai.beyondclouds.data.model.Project;
import cn.yunliyunwai.beyondclouds.databinding.FragmentProjectBinding;
import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
import cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment;
import cn.yunliyunwai.beyondclouds.ui.listener.OnNavigationReselectedListener;
import cn.yunliyunwai.beyondclouds.util.CategoryViewpagerUtils;
import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.ProjectFragmentViewModel;
import cn.yunliyunwai.beyondclouds.viewmodel.ProjectListFragmentViewModel;
public class ProjectFragment extends BaseFragment<ProjectFragmentViewModel, FragmentProjectBinding> {
public class ProjectFragment extends BaseFragment<ProjectFragmentViewModel, FragmentProjectBinding> implements OnNavigationReselectedListener {
@Inject
ViewModelProvider.Factory factory;
......@@ -76,6 +77,11 @@ public class ProjectFragment extends BaseFragment<ProjectFragmentViewModel, Frag
}
@Override
public void onNavigationReselected() {
CategoryViewpagerUtils.forceRefresh(binding.viewPager.getAdapter());
}
public static class ProjectListFragment extends RefreshableFragment<Project, ProjectListFragmentViewModel> {
@Inject
......
......@@ -22,6 +22,7 @@ import cn.yunliyunwai.beyondclouds.data.model.Question;
import cn.yunliyunwai.beyondclouds.databinding.FragmentQaBinding;
import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
import cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment;
import cn.yunliyunwai.beyondclouds.ui.listener.OnNavigationReselectedListener;
import cn.yunliyunwai.beyondclouds.util.CategoryViewpagerUtils;
import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.util.ViewModelUtils;
......@@ -29,7 +30,7 @@ import cn.yunliyunwai.beyondclouds.viewmodel.QAFragmentViewModel;
import cn.yunliyunwai.beyondclouds.viewmodel.QuestionListFragmentViewModel;
public class QAFragment extends BaseFragment<QAFragmentViewModel, FragmentQaBinding> {
public class QAFragment extends BaseFragment<QAFragmentViewModel, FragmentQaBinding> implements OnNavigationReselectedListener {
@Inject
ViewModelProvider.Factory factory;
......@@ -60,6 +61,11 @@ public class QAFragment extends BaseFragment<QAFragmentViewModel, FragmentQaBind
}, binding.magicIndicator, binding.viewPager, viewModel, false);
}
@Override
public void onNavigationReselected() {
CategoryViewpagerUtils.forceRefresh(binding.viewPager.getAdapter());
}
public static class QuestionListFragment extends RefreshableFragment<Question, QuestionListFragmentViewModel> {
@Inject
......
package cn.yunliyunwai.beyondclouds.ui.listener;
public interface OnNavigationReselectedListener {
void onNavigationReselected();
}
package cn.yunliyunwai.beyondclouds.util;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
import net.lucode.hackware.magicindicator.MagicIndicator;
......@@ -12,6 +14,7 @@ import cn.yunliyunwai.beyondclouds.adapter.common.CategoryNavigatorAdapter;
import cn.yunliyunwai.beyondclouds.base.BaseActivity;
import cn.yunliyunwai.beyondclouds.base.BaseFragment;
import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
import cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment;
import cn.yunliyunwai.beyondclouds.viewmodel.common.CategoryViewModel;
public class CategoryViewpagerUtils {
......@@ -48,4 +51,13 @@ public class CategoryViewpagerUtils {
commonNavigator.setAdapter(new CategoryNavigatorAdapter(categories, viewPager));
});
}
public static void forceRefresh(PagerAdapter adapter) {
if (adapter instanceof CategoryFragmentPagerAdapter) {
Fragment fragment = ((CategoryFragmentPagerAdapter) adapter).getCurrentFragment();
if (null != fragment && fragment instanceof RefreshableFragment) {
((RefreshableFragment) fragment).onRefresh();
}
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment