2014-01-09 5 views
0

В моем приложении у меня есть пейджер в качестве основного вида, я заполняю его внутри onStart(), но когда я поворачиваю экран, он падает (потому что он не может найти представления).Правильно заполнить пейджер

Куда я должен заполнить свой пейджер, чтобы он заселялся каждый раз, когда я вращаю свое устройство?

EDIT2:

Это код моих фрагментов

public class WakeyFragment extends Fragment { 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      ViewGroup wakeyView = (ViewGroup) inflater.inflate(
        R.layout.wakey, container, false); 

      return wakeyView; 
     } 
     @Override 
     public void onSaveInstanceState(final Bundle outState) { 
      // super.onSaveInstanceState(outState); 
     } 
    } 

    public class PremiumFragment extends Fragment { 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      ViewGroup premiumView = (ViewGroup) inflater.inflate(
        R.layout.premium_features, container, false); 


      return premiumView; 
     } 


     @Override 
     public void onViewCreated(View view, Bundle savedInstanceState) { 
      super.onViewCreated(view, savedInstanceState); 

      setViews(); 
      buttonSetup(); 
      autoWakeCheck(); 
      cpuWakeCheck(); 

      if (WakeService.isAwake) { 
       glow.setVisibility(View.VISIBLE); 
      } 
      else { 
       glow.setVisibility(View.INVISIBLE); 
      } 


     } 
     @Override 
     public void onSaveInstanceState(final Bundle outState) { 
      // super.onSaveInstanceState(outState); 
     } 
    } 

setViews(), где я могу найти точку в моем XML для всех моих взглядов с findViewByID(), buttonSetup() находится где я устанавливаю все свои кнопки с помощью onClickListeners и где я готовлю свои представления с помощью setTypeface, setBackground() и т. д. Теперь мой сбой происходит, когда вызывается buttonSetup(), как только я пытаюсь изменить представление (это происходит только тогда, когда i вращать экран)

Это новый журнал я получаю

01-10 15:06:25.714 16847-16847/com.doublep.wakey E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.doublep.wakey, PID: 16847 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.doublep.wakey/com.doublep.wakey.Bulb}: java.lang.NullPointerException 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265) 
      at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3758) 
      at android.app.ActivityThread.access$900(ActivityThread.java:145) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1212) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5081) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.doublep.wakey.Bulb.buttonSetup(Bulb.java:604) 
      at com.doublep.wakey.Bulb$PremiumFragment.onViewCreated(Bulb.java:1417) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:941) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 
      at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1884) 
      at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:566) 
      at com.doublep.wakey.Bulb.onStart(Bulb.java:1015) 
      at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171) 
      at android.app.Activity.performStart(Activity.java:5241) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2178) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265) 
            at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3758) 
            at android.app.ActivityThread.access$900(ActivityThread.java:145) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1212) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5081) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
            at dalvik.system.NativeStart.main(Native Method) 

Линия 1417 является buttonSetup(), и линией 604 является первой линией методы buttonSetup(), где я изменить фон вида

+0

Опубликовать код WakeyFragment, в частности определение класса и конструкторы –

+0

Я добавил дополнительную информацию – DoubleP90

+0

Опубликуйте свой метод buttonSetup(). Вероятно, вы не инициализировали свое мнение. – DroidBender

ответ

0

Check Activity lifecycle, и вы увидите, что метод onResume().

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

+0

Тогда, возможно, я что-то делаю неправильно в другом месте, я попытался с onResume(), и он сбой – DoubleP90

+0

Я добавил информацию для вашего EDIT. – keyboardsurfer

0

Ваши фрагменты кажутся вложенными внутренними классами.
Добавить ключевое слово static между public и class.

+0

Но тогда мне пришлось бы ставить все мои методы и переменные, или я должен называть все свои методы в другом месте? – DoubleP90

+0

Нет, вы бы этого не сделали. Вам нужно пересмотреть свою архитектуру - субконтроллеры (фрагменты) не должны напрямую вызывать методы на родительском контроллере, вместо этого вы должны потребовать, чтобы он реализовал какой-то интерфейс. Взгляните на http://developer.android.com/training/basics/fragments/communicating.html. –

0

Я нашел решение, я использую локальный широковещательный приемник, и я отправляю сообщение от onViewCreated(), затем я запускаю свои методы из широковещательного приемника, я не знаю, является ли это идеальным решением, но оно работает на данный момент

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