0

My project includes fragments inside of tabLayout. Fragments has recyclerView in the adapter that load data from web server. In this case, I want to use two different layouts for adapter. I get it how can use two different layout from StackOverflow, but my problem is I must detect which fragment must be loaded. So, I must detect which fragment is active from adapter class. How can I do this?

VoyageAdapter.java

 public class VoyageAdapter extends RecyclerView.Adapter<VoyageAdapter.ViewHolder> {

@Override
public VoyageAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (Case_A){
  View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.row_voyage_view_bus, parent, false);
    return new ViewHolder(itemView);}

else if (Case_B){
   View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.row_voyage_view, parent, false);
    return new ViewHolder(itemView);
    }
}}

BusFragment.java

 public class BusFragment extends MyBaseFragment {
TabLayout tabLayout;
MyViewPager viewPager;
CustomFragmentPagerAdapter adapter;

public BusFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_base_voyage, container, false);
    tabLayout = view.findViewById(R.id.tabLayout);
    viewPager = view.findViewById(R.id.viewPager);
    adapter = new CustomFragmentPagerAdapter(getChildFragmentManager());
    if (ResultActivity.hasReturn)
        attachFragmentsHasReturn();
    else
        attachFragmentsOneWay();
    return view;
}

void searchVoyages() {
    Voyage.getInstance().searchBusVoyages(getContext());
}

@Override
public void updateDate() {
    for (Fragment fragment :
            adapter.getFragments()) {
        ((MyBaseVoyageFragment) fragment).showLoadingDialog(true);
    }

    searchVoyages();
}
}

FlightFragment.java

 public class FlightFragment extends MyBaseFragment {
TabLayout tabLayout;
MyViewPager viewPager;
CustomFragmentPagerAdapter adapter;
public FlightFragment() {
    // Required empty public constructor
}
void searchVoyages(){
    Voyage.getInstance().searchFlightVoyages(getContext());
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_base_voyage, container, false);
    tabLayout = view.findViewById(R.id.tabLayout);
    viewPager =  view.findViewById(R.id.viewPager);
    adapter = new CustomFragmentPagerAdapter(getChildFragmentManager());
    if(ResultActivity.hasReturn)
        attachFragmentsHasReturn();
    else
        attachFragmentsOneWay();
    return view;
}
@Override
public void updateDate() {
    for (Fragment fragment:
            adapter.getFragments()) {
        ((MyBaseVoyageFragment)fragment).showLoadingDialog(true);
    }
    searchVoyages();
}
}

2 Answers2

0

You can try following to get the current fragment:

Fragment currentFragment = adapter.getItem(viewPager.getCurrentItem());
Binary Baba
  • 1,953
  • 2
  • 16
  • 23
0

this code useful to get active fragment

Fragment activeFragment = getSupportFragmentManager().findFragmentById(R.id.frame);
 //check fragment via instanceof 

 if(activeFragment instanceof Homefragment)
 {
    //home fragment is active
 }
milan pithadia
  • 840
  • 11
  • 16