-1

Я пытаюсь использовать ActionBarTabs, как щебетать вкладки Twitter в android. У меня три вкладки и три асинтетики, каждая вкладка имеет gridview друг в друге. Но мое мнение использует вкладки случайным образом. Например, при открытии страницы FragmentOne будет загружаться во втором представлении. Когда я перехожу на второй взгляд, FragmentTwo загружает третий вид. Когда я иду третьим, я вижу второй. Когда я вернусь второй, я вижу содержимое первого вида. Где моя ошибка, вы думаете?FragmentPagerAdapter использует неправильную страницу

pageType = getIntent().getIntExtra("type", 0); 
    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); 
    mViewPager.setAdapter(mAdapter); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    mViewPager 
      .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
       @Override 
       public void onPageSelected(int position) { 
        bar.setSelectedNavigationItem(position); 
       } 
      }); 
    // Adding Tabs 
    if (pageType != 3) { 
     for (String tab_name : tabs) { 
      bar.addTab(bar.newTab().setText(tab_name).setTabListener(this)); 
     } 
    } else { 
     for (String tab_name : tabs_multi) { 
      bar.addTab(bar.newTab().setText(tab_name).setTabListener(this)); 
     } 
    } 


public class TabsPagerAdapter extends FragmentPagerAdapter { 

    public TabsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int index) { 

     String text = getActionBar().getSelectedTab().getText().toString(); 
     if (text.equals("Futbol")) { 
      return new FragmentOne(pageType); 
     } else if (text.equals("Basketbol")) { 
      return new FragmentTwo(pageType); 
     } else if (text.equals("Voleybol")) { 
      return new FragmentThree(pageType); 
     } else if (text.equals("Video")) { 
      return new FragmentOne(pageType); 
     } else if (text.equals("Albüm")) { 
      return new FragmentTwo(pageType); 
     } else if (text.equals("Sesler")) { 
      return new FragmentThree(pageType); 
     } 

     return null; 
    } 

    @Override 
    public int getCount() { 
     // get item count - equal to number of tabs 
     return 3; 
    } 

} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 
} 

ответ

0

Это не то, как вы должны реализовать функцию PagerAdapter.getItem. Android вызовет эту функцию для каждого возможного индекса, чтобы получить фрагмент, который должен быть показан на этой вкладке. Поскольку ваш getCount возвращает 3, ваша функция getItem должна иметь оператор switch с аргументами case для 0, 1 и 2, и вы должны построить один из трех фрагментов в каждом случае. Затем PagerAdapter отслеживает эти фрагменты и возвращает их.

@Override 
public Fragment getItem(int index) { 
    switch (index) { 
     case 0: 
      return new FragmentOne(); 
     case 1: 
      return new FragmentTwo(); 
     case 2: 
      return new FragmentThree(); 
    } 
    return null; 
} 

Я немного запутался о том, как выбранная вкладка и текст работают, но вы действительно должны иметь только три фрагмента, с одной на каждой вкладке.

+0

Этот метод был моей первой попыткой, но он не работал. Когда вы говорите, что я пробую его снова, но он не работает –