Commit 3fe7234a by 段启岩

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

parent e2b47479
...@@ -23,10 +23,11 @@ import cn.yunliyunwai.beyondclouds.ui.HomeFragment; ...@@ -23,10 +23,11 @@ import cn.yunliyunwai.beyondclouds.ui.HomeFragment;
import cn.yunliyunwai.beyondclouds.ui.MyFragment; import cn.yunliyunwai.beyondclouds.ui.MyFragment;
import cn.yunliyunwai.beyondclouds.ui.ProjectFragment; import cn.yunliyunwai.beyondclouds.ui.ProjectFragment;
import cn.yunliyunwai.beyondclouds.ui.QAFragment; import cn.yunliyunwai.beyondclouds.ui.QAFragment;
import cn.yunliyunwai.beyondclouds.ui.listener.OnNavigationReselectedListener;
import cn.yunliyunwai.beyondclouds.util.StatusBarUtils; import cn.yunliyunwai.beyondclouds.util.StatusBarUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.MainActivityViewModel; 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 static final String TAG = MainActivity.class.getCanonicalName();
private List<Fragment> fragments; private List<Fragment> fragments;
...@@ -75,6 +76,7 @@ public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMa ...@@ -75,6 +76,7 @@ public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMa
binding.bottomNavigationView.setOnNavigationItemSelectedListener(this); binding.bottomNavigationView.setOnNavigationItemSelectedListener(this);
binding.bottomNavigationView.setOnNavigationItemReselectedListener(this);
binding.bottomNavigationView.setItemIconTintList(null); binding.bottomNavigationView.setItemIconTintList(null);
} }
...@@ -100,6 +102,34 @@ public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMa ...@@ -100,6 +102,34 @@ public class MainActivity extends BaseActivity<MainActivityViewModel, ActivityMa
return true; 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) { private void switchFragment(int index) {
int previousIndex = binding.getViewModel().getCurrentIndex(); int previousIndex = binding.getViewModel().getCurrentIndex();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
......
package cn.yunliyunwai.beyondclouds.adapter.common; package cn.yunliyunwai.beyondclouds.adapter.common;
import android.os.Bundle; import android.os.Bundle;
import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
...@@ -15,6 +16,7 @@ import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory; ...@@ -15,6 +16,7 @@ import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
public class CategoryFragmentPagerAdapter extends FragmentStatePagerAdapter { public class CategoryFragmentPagerAdapter extends FragmentStatePagerAdapter {
private List<CommonCategory> categories; private List<CommonCategory> categories;
private FragmentFactory factory; private FragmentFactory factory;
private Fragment currentFragment;
public CategoryFragmentPagerAdapter(@NonNull FragmentManager fm, List<CommonCategory> categories, FragmentFactory factory) { public CategoryFragmentPagerAdapter(@NonNull FragmentManager fm, List<CommonCategory> categories, FragmentFactory factory) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
...@@ -33,7 +35,17 @@ public class CategoryFragmentPagerAdapter extends FragmentStatePagerAdapter { ...@@ -33,7 +35,17 @@ public class CategoryFragmentPagerAdapter extends FragmentStatePagerAdapter {
} }
@Override @Override
public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
super.setPrimaryItem(container, position, object);
currentFragment = (Fragment) object;
}
@Override
public int getCount() { public int getCount() {
return categories.size(); return categories.size();
} }
public Fragment getCurrentFragment() {
return currentFragment;
}
} }
...@@ -22,13 +22,14 @@ import cn.yunliyunwai.beyondclouds.data.model.Post; ...@@ -22,13 +22,14 @@ import cn.yunliyunwai.beyondclouds.data.model.Post;
import cn.yunliyunwai.beyondclouds.databinding.FragmentDynamicBinding; import cn.yunliyunwai.beyondclouds.databinding.FragmentDynamicBinding;
import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory; import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
import cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment; 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.CategoryViewpagerUtils;
import cn.yunliyunwai.beyondclouds.util.ContextUtils; import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.DynamicFragmentViewModel; import cn.yunliyunwai.beyondclouds.viewmodel.DynamicFragmentViewModel;
import cn.yunliyunwai.beyondclouds.viewmodel.DynamicListFragmentViewModel; import cn.yunliyunwai.beyondclouds.viewmodel.DynamicListFragmentViewModel;
public class DynamicFragment extends BaseFragment<DynamicFragmentViewModel, FragmentDynamicBinding> { public class DynamicFragment extends BaseFragment<DynamicFragmentViewModel, FragmentDynamicBinding> implements OnNavigationReselectedListener {
@Inject @Inject
ViewModelProvider.Factory factory; ViewModelProvider.Factory factory;
...@@ -60,6 +61,11 @@ public class DynamicFragment extends BaseFragment<DynamicFragmentViewModel, Frag ...@@ -60,6 +61,11 @@ public class DynamicFragment extends BaseFragment<DynamicFragmentViewModel, Frag
}, binding.magicIndicator, binding.viewPager, viewModel, true); }, binding.magicIndicator, binding.viewPager, viewModel, true);
} }
@Override
public void onNavigationReselected() {
CategoryViewpagerUtils.forceRefresh(binding.viewPager.getAdapter());
}
public static class DynamicListFragment extends RefreshableFragment<Post, DynamicListFragmentViewModel> { public static class DynamicListFragment extends RefreshableFragment<Post, DynamicListFragmentViewModel> {
@Inject @Inject
......
...@@ -25,12 +25,13 @@ import cn.yunliyunwai.beyondclouds.data.model.Blog; ...@@ -25,12 +25,13 @@ import cn.yunliyunwai.beyondclouds.data.model.Blog;
import cn.yunliyunwai.beyondclouds.databinding.FragmentHomeBinding; import cn.yunliyunwai.beyondclouds.databinding.FragmentHomeBinding;
import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory; import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
import cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment; 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.CategoryViewpagerUtils;
import cn.yunliyunwai.beyondclouds.util.ContextUtils; import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.BlogListFragmentViewModel; import cn.yunliyunwai.beyondclouds.viewmodel.BlogListFragmentViewModel;
import cn.yunliyunwai.beyondclouds.viewmodel.HomeFragmentViewModel; import cn.yunliyunwai.beyondclouds.viewmodel.HomeFragmentViewModel;
public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHomeBinding> { public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHomeBinding> implements OnNavigationReselectedListener {
@Inject @Inject
ViewModelProvider.Factory factory; ViewModelProvider.Factory factory;
...@@ -75,6 +76,11 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo ...@@ -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> { public static class BlogListFragment extends RefreshableFragment<Blog, BlogListFragmentViewModel> {
@Inject @Inject
......
...@@ -25,13 +25,14 @@ import cn.yunliyunwai.beyondclouds.data.model.Project; ...@@ -25,13 +25,14 @@ import cn.yunliyunwai.beyondclouds.data.model.Project;
import cn.yunliyunwai.beyondclouds.databinding.FragmentProjectBinding; import cn.yunliyunwai.beyondclouds.databinding.FragmentProjectBinding;
import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory; import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
import cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment; 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.CategoryViewpagerUtils;
import cn.yunliyunwai.beyondclouds.util.ContextUtils; import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.viewmodel.ProjectFragmentViewModel; import cn.yunliyunwai.beyondclouds.viewmodel.ProjectFragmentViewModel;
import cn.yunliyunwai.beyondclouds.viewmodel.ProjectListFragmentViewModel; import cn.yunliyunwai.beyondclouds.viewmodel.ProjectListFragmentViewModel;
public class ProjectFragment extends BaseFragment<ProjectFragmentViewModel, FragmentProjectBinding> { public class ProjectFragment extends BaseFragment<ProjectFragmentViewModel, FragmentProjectBinding> implements OnNavigationReselectedListener {
@Inject @Inject
ViewModelProvider.Factory factory; ViewModelProvider.Factory factory;
...@@ -76,6 +77,11 @@ public class ProjectFragment extends BaseFragment<ProjectFragmentViewModel, Frag ...@@ -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> { public static class ProjectListFragment extends RefreshableFragment<Project, ProjectListFragmentViewModel> {
@Inject @Inject
......
...@@ -22,6 +22,7 @@ import cn.yunliyunwai.beyondclouds.data.model.Question; ...@@ -22,6 +22,7 @@ import cn.yunliyunwai.beyondclouds.data.model.Question;
import cn.yunliyunwai.beyondclouds.databinding.FragmentQaBinding; import cn.yunliyunwai.beyondclouds.databinding.FragmentQaBinding;
import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory; import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
import cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment; 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.CategoryViewpagerUtils;
import cn.yunliyunwai.beyondclouds.util.ContextUtils; import cn.yunliyunwai.beyondclouds.util.ContextUtils;
import cn.yunliyunwai.beyondclouds.util.ViewModelUtils; import cn.yunliyunwai.beyondclouds.util.ViewModelUtils;
...@@ -29,7 +30,7 @@ import cn.yunliyunwai.beyondclouds.viewmodel.QAFragmentViewModel; ...@@ -29,7 +30,7 @@ import cn.yunliyunwai.beyondclouds.viewmodel.QAFragmentViewModel;
import cn.yunliyunwai.beyondclouds.viewmodel.QuestionListFragmentViewModel; import cn.yunliyunwai.beyondclouds.viewmodel.QuestionListFragmentViewModel;
public class QAFragment extends BaseFragment<QAFragmentViewModel, FragmentQaBinding> { public class QAFragment extends BaseFragment<QAFragmentViewModel, FragmentQaBinding> implements OnNavigationReselectedListener {
@Inject @Inject
ViewModelProvider.Factory factory; ViewModelProvider.Factory factory;
...@@ -60,6 +61,11 @@ public class QAFragment extends BaseFragment<QAFragmentViewModel, FragmentQaBind ...@@ -60,6 +61,11 @@ public class QAFragment extends BaseFragment<QAFragmentViewModel, FragmentQaBind
}, binding.magicIndicator, binding.viewPager, viewModel, false); }, binding.magicIndicator, binding.viewPager, viewModel, false);
} }
@Override
public void onNavigationReselected() {
CategoryViewpagerUtils.forceRefresh(binding.viewPager.getAdapter());
}
public static class QuestionListFragment extends RefreshableFragment<Question, QuestionListFragmentViewModel> { public static class QuestionListFragment extends RefreshableFragment<Question, QuestionListFragmentViewModel> {
@Inject @Inject
......
package cn.yunliyunwai.beyondclouds.ui.listener;
public interface OnNavigationReselectedListener {
void onNavigationReselected();
}
package cn.yunliyunwai.beyondclouds.util; package cn.yunliyunwai.beyondclouds.util;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager; import androidx.viewpager.widget.ViewPager;
import net.lucode.hackware.magicindicator.MagicIndicator; import net.lucode.hackware.magicindicator.MagicIndicator;
...@@ -12,6 +14,7 @@ import cn.yunliyunwai.beyondclouds.adapter.common.CategoryNavigatorAdapter; ...@@ -12,6 +14,7 @@ import cn.yunliyunwai.beyondclouds.adapter.common.CategoryNavigatorAdapter;
import cn.yunliyunwai.beyondclouds.base.BaseActivity; import cn.yunliyunwai.beyondclouds.base.BaseActivity;
import cn.yunliyunwai.beyondclouds.base.BaseFragment; import cn.yunliyunwai.beyondclouds.base.BaseFragment;
import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory; import cn.yunliyunwai.beyondclouds.ui.common.FragmentFactory;
import cn.yunliyunwai.beyondclouds.ui.common.RefreshableFragment;
import cn.yunliyunwai.beyondclouds.viewmodel.common.CategoryViewModel; import cn.yunliyunwai.beyondclouds.viewmodel.common.CategoryViewModel;
public class CategoryViewpagerUtils { public class CategoryViewpagerUtils {
...@@ -48,4 +51,13 @@ public class CategoryViewpagerUtils { ...@@ -48,4 +51,13 @@ public class CategoryViewpagerUtils {
commonNavigator.setAdapter(new CategoryNavigatorAdapter(categories, viewPager)); 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