我的项目在fragments
内包含tabLayout
。 Fragments
中的recyclerView
中有adapter
,可从Web服务器加载数据。在这种情况下,我想对layouts
使用两个不同的adapter
。我知道如何使用来自StackOverflow的两个不同的layout
,但是我的问题是我必须检测必须加载哪个fragment
。因此,我必须从fragment
类中检测哪个adapter
是活动的。我该怎么办?
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();
}
}
答案 0 :(得分:0)
您可以尝试按照以下步骤获取当前片段:
Fragment currentFragment = adapter.getItem(viewPager.getCurrentItem());
答案 1 :(得分:0)
此代码可用于获取活动片段
Fragment activeFragment = getSupportFragmentManager().findFragmentById(R.id.frame);
//check fragment via instanceof
if(activeFragment instanceof Homefragment)
{
//home fragment is active
}