TabLayout和ViewPager无法正确显示两个片段

时间:2016-05-30 21:32:50

标签: android android-fragments android-viewpager android-tablayout

我有两个片段(Same class-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);
    }

我有两个标签,但只有第一个标签显示我的内容,另一个标签为空。 第一个标签显示了第二个标签的含义。

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

在我使用片段的活动中,我有这段代码:

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

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

谢谢!

编辑:这是PlayerFragment

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

}

1 个答案:

答案 0 :(得分:0)

你可以发布PlayerFragment的代码吗?我很确定错误是你在该类中的变量是静态的。还尝试使用“new instance()”方式创建片段 - &gt; Best practice for instantiating a new Android Fragment