2014-12-01 3 views
0

Мне нужна помощь при перезагрузке фрагмента, который является частью ViewPager. Вот моя текущая настройка: ReportActivity расширяет FragmentActivity и использует ViewPager для размещения 4 вкладок ТАБЛИЦА 1 - 4. Каждая вкладка представляет собой фрагмент с раздельным расположением.Android - перезагрузка фрагмента, который является частью ViewPager

ViewPager использует TabsPagerAdapter для переключения между вкладками, и это работает, как ожидалось.

TAB1Fragment отображает график, используя статический набор данных. Теперь я добавил spinner для динамического изменения набора данных, и я ищу способы перезагрузить Фрагмент, чтобы он мог повторно отображать график с правильным набором данных. Следующие значения соответствуют значениям Spinner.

static final int REPORT_PERIOD_DAY = 0; 
    static final int REPORT_PERIOD_WEEK = 1; 
    static final int REPORT_PERIOD_MONTH = 2; 
    static final int REPORT_PERIOD_YEAR = 3; 

У меня есть метод, который правильно высчитывает правильные данные, основанные на ИНТ прошло в то, что я борюсь с как создать Intent или любой другой метод, который воссоздаст TAB1Fragment и передает ему параметр Int ,

Вот где я хочу воссоздать фрагмент

 mReportPeriodSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      switch (position){ 
       case 0: 
        //How can I re-load the Fragment here? 
        reloadFragment(REPORT_PERIOD_DAY); 
        break; 
       case 1: 
        reloadFragment(REPORT_PERIOD_WEEK); 
        break; 
       case 2: 
        reloadFragment(REPORT_PERIOD_MONTH); 
        break; 
       case 3: 
        reloadFragment(REPORT_PERIOD_YEAR); 
        break; 
      } 

     } 

Пожалуйста, вы можете дать мне представление о том, как писать код, который входит в метод reloadFragment (Int период)

ответ

1

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

Я предполагаю, что вы в настоящее время настраиваете свой граф внутри onCreateView TAB1Fragment. Если вы переместите этот код конфигурации в onResume, вы можете вызвать ту же функцию, когда пользователь выбирает что-то в счетчике.

public class TAB1Fragment extends Fragment { 
    int reportPeriod; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = ... 
     reportPeriod = REPORT_PERIOD_DAY; // default report period 
     return rootView; 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     configureGraph(); 
    } 

    private void configureGraph() { 
     //TODO put all the code that draws your graphs here, using reportPeriod 
    } 

    public void reloadFragment(int reportPeriod) { 
     this.reportPeriod = reportPeriod; 
     configureGraph(); 
    } 
} 

Если этот подход действительно не работает для вас, и вам действительно нужен новый фрагмента каждый раз, то этот вопрос объясняет, как получить тег для фрагмента, так что вы можете сказать FragmentManager заменить его : Replace Fragment inside a ViewPager

+0

Отличный ответ, он почти сработал, но график не обновляется, я могу загрузить правильный набор данных, используя ваш подход. Я продолжу расследование. Спасибо за ответ –

Смежные вопросы