0

Ich habe zwei Fragmente (Same Klassen- PlayerFragment) und ich die ViewPager mit dieser Methode:TabLayout und ViewPager nicht korrekt mit zwei Fragmenten zeigt

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

Ich habe zwei Registerkarten aber nur die erste Registerkarte zeigt mir Inhalt , die andere Registerkarte ist leer. Und die ersten Tabs zeigen mir den Inhalt des zweiten.

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 der Tätigkeit, wo ich die Fragmente benutze ich habe diesen Code:

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

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

Dank!

Edit: Dies ist die 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; 
} 

}

Antwort

0

Können Sie nach dem Code PlayerFragment erstreckt? Ich bin ziemlich sicher, dass der Fehler ist, dass Sie die Variablen in dieser Klasse als statisch haben. Versuchen Sie auch, die "new instance()" Möglichkeit zum Erstellen von Fragmenten zu verwenden ->Best practice for instantiating a new Android Fragment

+0

Ich habe keine statischen Variablen und ich bin mir nicht sicher, ob newInstance gut definiert ist. Vielen Dank! –

+0

Ich füge den Code von PlayerFragment hinzu. –

+0

Jetzt sollten Sie Ihr Fragment initialisieren mit: pf1 = PlayerFragment.newInstance (5); adapter.addFrag (pf1, "Spieler 1"); –

Verwandte Themen