Hello I’ve Three backside navigation menu
- House
- MyTour
- Profile
Inside MyTour, I’ve tabLayout by which I’ve Three tabs :
- Pending
- Success
- Failed
For pending, success and failed I’m not utilizing separate fragment however single fragment by which i’m loading information from db rely on standing.
MyTourFrgament
have desk format and for all tabs i’m utilizing jobListFragment
by which refreshList()
technique will get name rely on standing.
Drawback assertion :
If i’m going to Pending(0) -> Failed(2)
or Failed(2)->Pending(0)
then it is not going to loading jobListFragment and returning null but when i’m going in sequence like Pending(0)->Success(1)->Failed(2)
then every thing is working high-quality,
Right here is MyTourFragment Code :
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
tremendous.onCreate(savedInstanceState);
mViewModel.setNavigator(this);
setHasOptionsMenu(true);
//Get the Tab Id.
Bundle bundle = this.getArguments();
if (bundle != null){
mViewModel.setSelectedDateTimeMillis(bundle.getLong("todaysDateForMyTour", Calendar.getInstance().getTimeInMillis()));
mSelectedTabId = bundle.getInt(KEY_SELECTED_TAB, 0);
}
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
tremendous.onViewCreated(view, savedInstanceState);
mFragmentMyTourBinding = getViewDataBinding();
mMyTourJobsListPagerAdapter = new MyTourJobsListPagerAdapter(this, mViewModel.getTourIdForSelectedDate(), this);
mFragmentMyTourBinding.vpMyTour.setAdapter(mMyTourJobsListPagerAdapter);
mFragmentMyTourBinding.vpMyTour.setCurrentItem(0);
mFragmentMyTourBinding.tabLayoutMyTour.setupWithViewPager(mFragmentMyTourBinding.vpMyTour, true);
mFragmentMyTourBinding.tabLayoutMyTour.addOnTabSelectedListener(this);
setUpTabs();
}
personal void setUpTabs() {
TabLayout.Tab pendingTab = mFragmentMyTourBinding.tabLayoutMyTour.getTabAt(0);
setCustomTabView(Objects.requireNonNull(pendingTab), "Pending");
TabLayout.Tab successTab = mFragmentMyTourBinding.tabLayoutMyTour.getTabAt(1);
setCustomTabView(Objects.requireNonNull(successTab), "Success");
TabLayout.Tab failedTab = mFragmentMyTourBinding.tabLayoutMyTour.getTabAt(2);
setCustomTabView(Objects.requireNonNull(failedTab), "Failed");
//Choose the present Tab.
mFragmentMyTourBinding.vpMyTour.setCurrentItem(0);
getActivity().invalidateOptionsMenu();
//Refresh job record as per the chosen date.
FragmentMyTourJobsList fragmentMyTourJobsList = mMyTourJobsListPagerAdapter.getFragmentAtTab(mSelectedTabId);
if (fragmentMyTourJobsList != null) {
fragmentMyTourJobsList.refreshJobsList(mViewModel.getTourIdForSelectedDate());
}
}
@Override
public void onTabSelected(TabLayout.Tab tab) {
setTabViewSelectionState(tab, true);
int place = mFragmentMyTourBinding.tabLayoutMyTour.getSelectedTabPosition();
FragmentMyTourJobsList fragmentMyTourJobsList = mMyTourJobsListPagerAdapter.getFragmentAtTab(place); **//null coming right here**
if (fragmentMyTourJobsList != null) {
fragmentMyTourJobsList.refreshJobsList(mViewModel.getTourIdForSelectedDate());
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
setTabViewSelectionState(tab, false);
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
}
Right here is MyTourJobsListPagerAdapter code :
public class MyTourJobsListPagerAdapter extends FragmentStatePagerAdapter {
personal static closing int MY_TOUR_JOBS_LIST_PAGES_COUNT = 3;
personal static closing int POSITION_TAB_PENDING = 0;
personal static closing int POSITION_TAB_SUCCESS = 1;
personal static closing int POSITION_TAB_FAILED = 2;
personal HashMap<Integer, FragmentMyTourJobsList> mTabsFragments = new HashMap<Integer, FragmentMyTourJobsList>();
personal lengthy mTourId;
personal FragmentMyTourJobsList.FragmentMyTourJobsListListener mFragmentMyTourJobsListListener;
public MyTourJobsListPagerAdapter(Fragment fragment, lengthy tourId, FragmentMyTourJobsList.FragmentMyTourJobsListListener fragmentMyTourJobsListListener) {
tremendous(fragment.getChildFragmentManager(), BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
this.mTourId = tourId;
this.mFragmentMyTourJobsListListener = fragmentMyTourJobsListListener;
}
public void setTourId(lengthy tourId){
this.mTourId = tourId;
}
@Override
public int getCount() {
return MY_TOUR_JOBS_LIST_PAGES_COUNT;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int place) {
Fragment fragment = (Fragment) tremendous.instantiateItem(container, place);
mTabsFragments.put(place, (FragmentMyTourJobsList) fragment);
return fragment;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int place, @NonNull Object object) {
mTabsFragments.take away(place);
tremendous.destroyItem(container, place, object);
}
@Override
public Fragment getItem(int place) {
FragmentMyTourJobsList fragmentMyTourJobsList;
swap (place) {
case POSITION_TAB_PENDING:
default:
fragmentMyTourJobsList = getFragmentWithBundle(Constants.JOB_STATUS_ACCEPTED);
break;
case POSITION_TAB_SUCCESS:
fragmentMyTourJobsList = getFragmentWithBundle(Constants.JOB_STATUS_SUCCESSFUL);
break;
case POSITION_TAB_FAILED:
fragmentMyTourJobsList = getFragmentWithBundle(Constants.JOB_STATUS_FAILED);
break;
}
return fragmentMyTourJobsList;
}
public FragmentMyTourJobsList getFragmentAtTab(int tabPosition){
return mTabsFragments.get(tabPosition);
}
personal FragmentMyTourJobsList getFragmentWithBundle(String jobsStatus){
FragmentMyTourJobsList fragmentToLoad = FragmentMyTourJobsList.newInstance();
return fragmentToLoad;
}
}
I already spent 2 days on this challenge however not capable of finding resolution. In onTabSelected() FragmentMyTourJobsList is coming null when i received pending -> failed or Failed -> Pending. Any assist or reference is admittedly appreciated