Search code examples
androidandroid-layoutandroid-fragmentsandroid-tablayout

TabLayout always shows the last fragment


I am trying to fill Tablayout from 2 different fragments depending on the value (0 or 1) of the argument Radios.newInstance(int type)

The first fragment contains all radio stations and the second contains the favorite stations

But it shows me always the fragment containing the favorite stations

public class HomeFragment extends Fragment {

public static final String TAG = "HomeFragment";
private SectionsPagerAdapter mSectionsPagerAdapter;
private ProgressBar mProgressView;
private ViewGroup mContainer;
private BaseActivity activity;

public HomeFragment() {
}

public static HomeFragment newInstance() {
    return new HomeFragment();
}

public void showProgress(final boolean show) {
    mContainer.setVisibility(show ? View.GONE : View.VISIBLE);
    mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    View view = inflater.inflate(R.layout.fragment_home, container, false);
    activity = (BaseActivity) getActivity();
    activity.findViewById(R.id.tabs).setVisibility(View.VISIBLE);
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

    activity.getSupportActionBar().show();
    mProgressView = (ProgressBar) activity.findViewById(R.id.progress);
    mContainer = container;
    showProgress(true);

    ViewPager mViewPager = (ViewPager) view.findViewById(R.id.container);

    List<Fragment> fragments = new Vector<Fragment>();
    fragments.add(RadiosFragment.newInstance(0));
    fragments.add(RadiosFragment.newInstance(1));

    mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager(), fragments);

    mViewPager.setAdapter(mSectionsPagerAdapter);
    TabLayout tabLayout = (TabLayout) activity.findViewById(R.id.tabs);
    tabLayout.setVisibility(View.VISIBLE);
    tabLayout.setTabMode(TabLayout.GRAVITY_CENTER);
    tabLayout.setupWithViewPager(mViewPager);
    showProgress(false);

    return view;
}

public class SectionsPagerAdapter extends FragmentStatePagerAdapter {

    private List<Fragment> mFragments;

    public SectionsPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        mFragments = fragments;

    }

    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

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

    @Override
    public CharSequence getPageTitle(int position) {

        switch (position) {
            case 0:
                return "RADIOS";
            case 1:
                return "FAVORITES";
            default:
                return null;
        }


    }
}
}

This is the fragment that i want to show, if type == 0 it shows the all radio stations, and if type == 1 it shows the favorite stations

public class RadiosFragment extends Fragment {

private static String TYPE = "NONE";

private FirebaseRecyclerAdapter<FireBaseManager.Radio, ViewHolder> mAdapter = null;
private FirebaseRecyclerAdapter<FireBaseManager.Favorites, ViewHolder> mAdapter_fav = null;

private RecyclerView recyclerView;

public ArrayList<FireBaseManager.Favorites> listOrder;

public RadiosFragment() { }

public static RadiosFragment newInstance(int type) {
    if (type == 1 )
        TYPE = "favorite";
    else
        TYPE = "radios";

    RadiosFragment fragment = new RadiosFragment();
    Bundle args = new Bundle();
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_item_list, container, false);

    final Context context = view.getContext();
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

    recyclerView = (RecyclerView) view.findViewById(R.id.list);
    recyclerView.setLayoutManager(new LinearLayoutManager(context));

    Query query = FireBaseManager.Radio.Ref.orderByChild(FireBaseManager.Radio.Table.Name.text);
    ProgressDialog progressDialog = new ProgressDialog(getContext());

    if (TYPE == "favorite"){
                    ....
                    @Override
                    protected void populateViewHolder(ViewHolder viewHolder, FireBaseManager.Favorites model, int position) {
                        ...
                        viewHolder.Initialize(Data);
                        ...
                    }
                };
                recyclerView.setAdapter(mAdapter_fav);
            }
        });
    }
    else if(TYPE == "radios") {
                ....
                @Override
                protected void populateViewHolder(ViewHolder viewHolder, FireBaseManager.Radio model, int position) {
                    ...
                    viewHolder.Initialize(Data);
                    ...
                    });
                }
            };
            recyclerView.setAdapter(mAdapter);
        });
    }
    return view;
}

}

I think the problem has to do with onCreateView / onCreate but i am no sure, can you help me please.


Solution

  • thank you very much for your answers, i have found a solution for my problem.

    the solution is to add Listener on the Tablayout and intercept the events.

    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                if (tab.getPosition() == 0)
    
                    getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.flContent, RadiosFragment.newInstance(0), FavoriteActivity.TAG).addToBackStack(null).commit();
    
                if (tab.getPosition() == 1)
    
                    getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.flContent, RadiosFragment.newInstance(1), FavoriteActivity.TAG).addToBackStack(null).commit();
    
    
            }
    
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
    
            }
    
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
    
            }
        });