1

Я делаю приложение для хранения баллов, используя вкладки, вкладки, фрагменты и FragmentPagerAdapter. Приложение работает нормально, но я не могу понять, как я могу получить доступ к фрагментам. После выполнения некоторой работы в фрагменте я хочу получить доступ к фрагменту, чтобы обновить его оценку. Как я могу получить доступ к текущему фрагменту?Android FragmentPagerAdapter с таким же классом фрагментов

Редактировать - моя основная проблема - найти позицию. Я могу использовать tabLayout.getSelectedTabPosition(), чтобы получить правильную позицию, если я нажал на вкладку, но если я проведу между вкладками, viewpager обрабатывает ее по-разному, и я не знаю, как найти позицию из этого.

public class PagerAdapter extends FragmentPagerAdapter { 
    private int numTabs; 

    public PagerAdapter(FragmentManager fm, int tabs) { 
     super(fm); 
     numTabs = tabs; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return makeScoreFrag(1, "Team 1"); 
      case 1: 
       return makeScoreFrag(2, "Team 2"); 
      case 2: 
       return makeScoreFrag(3, "Team 3"); 
      case 3: 
       return makeScoreFrag(4, "Team 4"); 
      default: 
       return null; 
     } 
    } 

    @Override 
    public int getCount() { 
     return numTabs; 
    } 

    private ScoreFragment makeScoreFrag(int num, String title){ 
     Bundle bundle = new Bundle(); 
     bundle.putInt("score", 0); 
     bundle.putInt("number", num); 
     bundle.putString("title", title); 
     ScoreFragment frag = new ScoreFragment(); 
     frag.setArguments(bundle); 
     return frag; 
    } 
} 
+0

Вы можете исследовать при добавлении OnPageChangeListener для ViewPager, чтобы следить за выбранной страницы можно было бы рассмотреть твои нужды. – headuck

ответ

0

Вы можете переопределить instantiateItem метод в FragmentPagerAdapter

ScoreFragment[] fragments = new ScoreFragment[numTabs]; 
@Override 
public Object instantiateItem(ViewGroup container, final int position) { 
    fragments[position] = (ScoreFragment) super.instantiateItem(container, position); 
    return fragments[position]; 
} 

Затем текущий фрагмент:

ScoreFragment curFragment = fragments[curTab]; 
Смежные вопросы