1

Activity

public class GroupesActivity extends BaseActivity {
SelectedBundle selectedBundle;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_groupes);
        sectionsPagerAdapter = new GroupPagerAdapter(this, getSupportFragmentManager());
    viewPager.setAdapter(sectionsPagerAdapter);
    tabs.setupWithViewPager(viewPager);
    
}
 private void getAllGroup() {
// api call retrive data
        // send data using interface on response     
        //   set data         selectedBundle.onBundleSelect(isVisible,calanderModelList,groupModelList,eventModelList);

}

  public void setOnBundleSelected(SelectedBundle selectedBundle) {
        this.selectedBundle = selectedBundle;
    }

    public interface SelectedBundle {
        void onBundleSelect(boolean isVisible, List<CalanderModel> calanderModelList, List<GroupModel> groupModelList, List<EventModel> eventModelList);
    }


}

Frgment

    public class FragmentOne extends Fragment {
      @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            View root = inflater.inflate(R.layout.fragment_all_groups_fragments, container, false);

// get data only once on oncreateview 

      ((GroupesActivity) getActivity()).setOnBundleSelected(new GroupesActivity.SelectedBundle() {
                @Override
                public void onBundleSelect(boolean isVisible, List<CalanderModel> calanderModelListtt, List<GroupModel> groupModelList, List<EventModel> eventModelList) {
    
                    Log.e("retrive data","data")
                }
            });
    
    return root;
    }
    }

GroupPagerAdapter

public class GroupPagerAdapter extends FragmentPagerAdapter {
    @StringRes
    private static final int[] TAB_TITLES = new int[]{R.string.tab_text_1, R.string.tab_text_2, R.string.tab_text_3};
    private final Context mContext;

    public GroupPagerAdapter(Context context, FragmentManager fm) {
        super( fm);
        this.mContext=context;
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new AllGroupsFragments();
            case 1:
                return new HostFragments();
            case 2:
                return new GuestFragments();
        }
        return null;
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return mContext.getResources().getString(TAB_TITLES[position]);
    }

    @Override
    public int getCount() {
        return 3;
    }

}

problem

i have three fragments in tabview when i swipe this obove fragment and then come again in this fragmnet that interface not called and i'm not getting data from activity

How to get that data again from its parent activity, i need to only retrive that data from activity on each time of fragments oncreateView

Thanks in adavance ;)

YuvrajsinhJadeja
  • 1,383
  • 7
  • 23

1 Answers1

0

Use setMenuVisibility() method in Fragment to fix the issue.

//In fragments
@Override
public void setMenuVisibility(final boolean isVisible) {
    super.setMenuVisibility(isVisible);
    if (isVisible) {
        //visible to user- do ur stuff
        ((GroupesActivity) getActivity()).setOnBundleSelected(new 
           GroupesActivity.SelectedBundle() {
            @Override
            public void onBundleSelect(boolean isVisible, List<CalanderModel> 
                calanderModelListtt, List<GroupModel> groupModelList, List<EventModel> 
                eventModelList) {

                Log.e("retrive data","data")
            }
        });
    }
}

the following link may help if you face any issues: How to determine when Fragment becomes visible in ViewPager

Geo
  • 746
  • 6
  • 14
  • thanks for quick answer, but it gives NullPointerException: on interface method with on a null object reference at setOnBundleSelected – YuvrajsinhJadeja Dec 20 '20 at 08:49
  • Can you share logcat log? – Geo Dec 20 '20 at 08:51
  • problem is what when i go on fragment three by swiping tabview and again i came on fragment one it creates again and that time this interface method didn't called – YuvrajsinhJadeja Dec 20 '20 at 08:52
  • java.lang.NullPointerException: Attempt to invoke virtual method 'void com.activity.GroupesActivity.setOnBundleSelected(com.activity.GroupesActivity$SelectedBundle)' on a null object reference at com.illumaworks.Whenis.fragments.AllGroupsFragments.setMenuVisibility(AllGroupsFragments.java:96) – YuvrajsinhJadeja Dec 20 '20 at 08:53
  • is there any other way to get data from parent activity again when fragment creates? – YuvrajsinhJadeja Dec 20 '20 at 08:55
  • Error you are facing bcz, sometimes setMenuVisibility get triggered before `onCreateView` – Geo Dec 20 '20 at 08:55
  • There is a workaround you can find it here: https://stackoverflow.com/a/25101237/6611986 let me know if you are still facing issues – Geo Dec 20 '20 at 08:57
  • not worked problem is what my fragment didn't call on resume it calls every time when i came back onCreateView, check i also added code of pager adapter in question – YuvrajsinhJadeja Dec 20 '20 at 09:17