简体   繁体   English

TabLayout和ViewPager不能正确显示两个片段

[英]TabLayout and ViewPager not showing correctly with two fragments

I have two fragments (Same class- PlayerFragment) and I set the ViewPager with this method: 我有两个片段(同一类PlayerFragment),并使用此方法设置ViewPager:

private void setupViewPager(ViewPager viewPager) {
        FragmentManager fManager = getSupportFragmentManager();
        ViewPagerAdapter adapter = new ViewPagerAdapter(fManager);

        Bundle args1 = new Bundle();
        args1.putInt("Id",1);
        PlayerFragment pf1 = new PlayerFragment();
        pf1.setArguments(args1);
        adapter.addFrag(pf1, "Players 1");

        Bundle args2 = new Bundle();
        args2.putInt("Id",2);
        PlayerFragment pf2 = new PlayerFragment();
        pf2.setArguments(args2);
        adapter.addFrag(pf2, "Players 2");

        viewPager.setAdapter(adapter);
    }

I have two tabs but only the first tab shows me content, the other tab is empty. 我有两个标签,但只有第一个标签显示了我的内容,另一个标签为空。 And the first tabs shows me the contentent of the second one. 第一个标签向我展示了第二个标签的内容。

static class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

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

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFrag(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

In the activity where I use the fragments I have this code: 在使用片段的活动中,我有以下代码:

final ViewPager viewPager = (ViewPager) findViewById(R.id.vpTeam);
        setupViewPager(viewPager);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabsTeam);
        tabLayout.setupWithViewPager(viewPager);

Thanks! 谢谢!

Edit: This is the PlayerFragment 编辑:这是PlayerFragment

public class PlayerFragment extends Fragment { 公共类PlayerFragment扩展Fragment {

private ProgressDialog progressDialog;
private List<Player> myPlayers = new ArrayList<>();
private int myTeamId = 14;

public PlayerFragment(){

}

public static PlayerFragment newInstance(int someInt) {
    PlayerFragment myFragment = new PlayerFragment();

    Bundle args = new Bundle();
    args.putInt("TeamId", someInt);
    myFragment.setArguments(args);

    return myFragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    Bundle args = getArguments();
    if(args!=null) {
        myTeamId = args.getInt("TeamId");
    }
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_player, container, false);
    new BackgroundAsyncTask().execute();
    return view;
}

} }

Can you post the code of PlayerFragment? 您可以发布PlayerFragment的代码吗? I'm pretty sure that the error is that you have the variables in that class as static. 我非常确定错误是您在该类中将变量设置为静态。 Also try to use the "new instance()" way for creating fragments --> Best practice for instantiating a new Android Fragment 也尝试使用“ new instance()”方法创建片段-> 实例化新Android片段的最佳做法

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM