首页 > 解决方案 > TabLayout 总是显示最后一个片段

问题描述

我正在尝试Tablayout根据参数的值(0或1)从2个不同的片段中填充Radios.newInstance(int type)

第一个片段包含所有广播电台,第二个片段包含最喜欢的电台

但它总是向我显示包含喜欢的电台的片段

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;
        }


    }
}
}

这是我要显示的片段,如果type == 0它显示所有广播电台,如果type == 1它显示最喜欢的电台

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;
}

}

我认为问题与onCreateView / onCreate有关,但我不确定,请您帮帮我。

标签: androidandroid-layoutandroid-fragmentsandroid-tablayout

解决方案


这可能会帮助你。

mViewPager.setCurrentItem(0); 

tabLayout设置后添加此行viewpager


推荐阅读