0

Мне не хватает понимания того, как это сделать, и большинство примеров, которые я видел, либо не кажутся применимыми в моей ситуации, либо совершенно смущают меня.Загрузите все фрагменты в ViewPager onCreate

Моя проблема: У меня есть 4 фрагмента, 2 для отправки данных и 2 для анализа данных и расчетов данных. Единственный способ, которым мой код способен вытащить из двух последних фрагментов, кажется, от основного FragmentActivity. Проблема в том, что не все мои фрагменты загружаются, когда Activity переходит через метод onCreate, и когда я пытаюсь объявить onClickListener, я получаю NullPointerException, потому что эта страница еще не загружена.

Теперь у меня есть setOffscreenPageLimit, установленный в 3, так что это не должно быть проблемой, но я не могу понять, как загрузить страницы при запуске.

Код:

Линия, которая вызывает приложение силы близко является декларация/выполнение btnEnterChemicals

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.swipe_chemicals); 

    //declarations 
    ... 
    some declarations 
    ... 

    //Set up ViewPager and allow app to hold prior pages when off screen 
    ChemicalsAdapter = new ResultsPagerAdapter(getSupportFragmentManager()); 
    ChemicalsPager = (ViewPager) findViewById(R.id.chemicals_pager);   
    ChemicalsPager.setAdapter(ChemicalsAdapter); 
    ChemicalsPager.setOffscreenPageLimit(3); 

    //When SwipeReviewResults is displayed, fill EditText's with data from other fragments 
    ChemicalsPager.setOnPageChangeListener(new OnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 

      if (position == 2) { 
       //Pull values from Chemicals 1 
       ... 
       some assignments 
       ... 

       //Pull values from Chemicals 2 
       ... 
       some assignments 
       ... 

       //Declare rvw text boxes for Meter Review 1 
       ... 
       some assignments 
       ... 

       //Declare rvw text boxes for Meter Review 2 
       ... 
       some assignments 
       ... 

       //If data isn't null, perform calculations on client entries 
       if (data != null) 
       {      
        //Do calculations before displaying values in review pages 
        ... 
        some calculations 
        ... 


        //Display results 
        ... 
        display results 
        ... 
       } 

       //Copy entered data to Chemicals Review 1 
       ... 
       display results 
       ... 

       //Copy entered data to Chemicals Review 2 
       ... 
       display results 
       ... 

      } 
     } 
     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { } 
     @Override 
     public void onPageScrollStateChanged(int arg0) { } 
    }); 

    //Insert data into database 
    class insertNew implements Runnable 
    { 
     ... 
     data submission 
     ... 
    } 

    //Declare and set OnClickListener for Entering Results 
    final Button btnEnterChemicals = (Button) ChemicalsPager.findViewById(R.id.btnEnterChemicals); 
    btnEnterChemicals.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //set and encode url for data submission 
      ... 
      prepare data 
      ... 

      //Declare and start thread 
      Thread thrInsertNew = new Thread(new insertNew(url)); 
      thrInsertNew.start(); 

     } 
    }); 

Спасибо за вашу помощь заранее !!

ответ

0

Не следует ли реализовать ваш onClickListener в методе onCreate фрагмента, который содержит указанную кнопку?

В примерах, которые я видел до сих пор, вы создаете фрагмент (Java-класс и XML-файл) для каждой из вкладок, которые вы хотите реализовать, а затем вы указываете PagerAdapter, какой из них соответствует какой позиции. Как вы сказали, кнопка btnEnterChemicals не существует, пока страница не загрузится, поэтому правильный способ добавить ее в составCLickListener будет внутри метода onCreate соответствующего фрагмента. Я не уверен, правильно ли это относится к вашему вопросу. Пожалуйста, дайте мне знать.

PS: Попробуйте прочитать this для получения информации о том, как общаться между фрагментами и их активностью.

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