Autore Topic: Fragment not attached to Activity  (Letto 770 volte)

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Fragment not attached to Activity
« il: 07 Ottobre 2014, 18:39:47 CEST »
0
Salve, sto realizzando u'app che mostra una sequenza di immagini tramite il ViewPager, basandomi sul codice presente in questo topic.
Ho apportato alcune modifiche: i fragment sono 5 e vengono visualizzati in modo circolare (solo i fragment in posizione 1, 2 e 3 vengono usati davvero come pagine, mentre quelli in 0 e 4 contengono delle copie per rendere più gradevole la transizione).
Il problema è che quando vado a fare la fragments.get(i) per impostare l'immagine da visualizzare (ovviamente vado a selezionare altri fragment visto che devo preparare l'immagine prima che l'utente visualizzi quella pagina), mi ritrovo con l'errore:
Codice: [Seleziona]
10-07 12:30:59.073: E/AndroidRuntime(2189): FATAL EXCEPTION: main
10-07 12:30:59.073: E/AndroidRuntime(2189): Process: it.anddev.bradipao.mercury, PID: 2189
10-07 12:30:59.073: E/AndroidRuntime(2189): java.lang.IllegalStateException: Fragment PageFragment{b1d4b038} not attached to Activity
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.support.v4.app.Fragment.getResources(Fragment.java:551)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at it.anddev.bradipao.mercury.PageFragment.setWP(PageFragment.java:44)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at it.anddev.bradipao.mercury.MercuryActivity$1.onPageSelected(MercuryActivity.java:69)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:438)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.support.v4.view.ViewPager.onTouchEvent(ViewPager.java:1527)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.View.dispatchTouchEvent(View.java:7706)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.app.Activity.dispatchTouchEvent(Activity.java:2458)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.View.dispatchPointerEvent(View.java:7886)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3954)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3833)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5602)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5582)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5553)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5682)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.os.MessageQueue.nativePollOnce(Native Method)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.os.MessageQueue.next(MessageQueue.java:138)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.os.Looper.loop(Looper.java:123)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at android.app.ActivityThread.main(ActivityThread.java:5017)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at java.lang.reflect.Method.invokeNative(Native Method)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at java.lang.reflect.Method.invoke(Method.java:515)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
10-07 12:30:59.073: E/AndroidRuntime(2189):         at dalvik.system.NativeStart.main(Native Method)

Il codice dell'Activity è:
Codice (Java): [Seleziona]
public class MercuryActivity extends FragmentActivity{

        static int[] immagini = {R.drawable.apple, R.drawable.arab, R.drawable.exotic, R.drawable.fishing, R.drawable.island,
                R.drawable.maldives, R.drawable.nice, R.drawable.sahara, R.drawable.simple, R.drawable.wallpaper};

        // list contains fragments to instantiate in the viewpager
        List<PageFragment> fragments = new Vector<PageFragment>();
        // page adapter between fragment list and view pager
        private PagerAdapter mPagerAdapter;
        // view pager
        private ViewPager mPager;
        static int indice = 1;
        int l = immagini.length;
        int old_pos = 0;
        boolean right_direction = false;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
               
                for(int i = 0; i < 5; i++){
                        PageFragment f = new PageFragment();
                        fragments.add(f);
                }

                // creating fragments and adding to list

                // creating adapter and linking to view pager
                this.mPagerAdapter = new PagerAdapter(super.getSupportFragmentManager(),fragments);
                mPager = (ViewPager) super.findViewById(R.id.pager);
                mPager.setAdapter(this.mPagerAdapter);

                mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

                        @Override
                        public void onPageSelected(int position) {
                               
                                if (position > old_pos ){
                                        if (position == 3 && old_pos == 0) right_direction = false;
                                        right_direction = true;
                                }
                                else if (position < old_pos ){
                                        if (position == 1 && old_pos == 4) right_direction = true;
                                        else right_direction = false;
                                }
                               
                                /*Imposto le immagini*/
                                if (position == 1){
                                        fragments.get(0).setWP(immagini[indice - 1]);
                                        fragments.get(2).setWP(immagini[indice + 1]);
                                        fragments.get(3).setWP(immagini[indice - 1]);
                                }
                                else if (position == 2){
                                        fragments.get(1).setWP(immagini[indice - 1]);
                                        fragments.get(3).setWP(immagini[indice + 1]);
                                }
                                else if (position == 3){
                                        fragments.get(1).setWP(immagini[indice + 1]);
                                        fragments.get(2).setWP(immagini[indice - 1]);
                                        fragments.get(4).setWP(immagini[indice + 1]);
                                }
                               
                               
                               
                                if (position == 4){
                                        position = 1;
                                        old_pos = 0;
                                        mPager.setCurrentItem(position, false);
                                }
                                else if (position == 0){
                                        position = 3;
                                        old_pos = 4;
                                        mPager.setCurrentItem(position, false);
                                }
                                else{                                  
                                        old_pos = position;
                                        mPager.setCurrentItem(position);
                                }
                                if (right_direction) indice++;
                                else indice--;
                        }

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

mentre quello della classe PageFragment è:
Codice (Java): [Seleziona]
public class PageFragment extends Fragment{
        public int defaultWP = R.drawable.apple;
        private static View view;

        public PageFragment() {
        }
       
        @Override
        public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
                super.onCreateView(inflater, container, savedInstanceState);
               
                // fragment not when container null
                if (container == null) {
                        return null;
                }
                // inflate view from layout
                view = (LinearLayout)inflater.inflate(R.layout.frag_layout,container,false);
               
                ((ImageView) view.findViewById(R.id.wallpaper)).setBackground(getResources().getDrawable(defaultWP));
               
                return view;
        }

        // set text helper function
        public void setText(String item) {
                TextView vv = (TextView) view.findViewById(R.id.text);
                vv.setText(item);
        }

        public void setWP(int id){
                ImageView vv = (ImageView) view.findViewById(R.id.wallpaper);
                vv.setBackground(getResources().getDrawable(id));
        }

}
Il PagerAdapter è lo stesso della guida e non credo risieda lì il problema.
Se chiedo la dimensione di fragments mi dice che ci sono effettivamente 5 elementi, quindi non capisco quale sia il problema.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Fragment not attached to Activity
« Risposta #1 il: 07 Ottobre 2014, 19:16:07 CEST »
0
L'errore dice che il fragment in questione non è ancora attaccato all'activity. Se è una cosa temporanea della configurazione di avvio, dovrebbe bastare controllare con isAdded().

In quale rigo esatto genera l'errore?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Fragment not attached to Activity
« Risposta #2 il: 07 Ottobre 2014, 21:44:51 CEST »
0
L'errore compare in:
Codice (Java): [Seleziona]
fragments.get(0).setWP(immagini[indice - 1]);Ho provato ad usare isAdded e l'errore mi compare con il successivo scorrimento. Il problema è che se non esegue il cambio di immagine l'app diventa praticamente inutile.
C'è un modo per essere sicuri che alla creazione del fragment questo venga aggiunto all'activity?

Offline nibbler

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Htc sensantion XL
  • Sistema operativo:
    windows 7
Re:Fragment not attached to Activity
« Risposta #3 il: 07 Ottobre 2014, 23:10:56 CEST »
0
Ciao

Il problema mi sembra che sia il fatto che tu faccia accesso a view quando ancora non è stata chiamata la onCreateView.
Puoi provare  a salvarti solo l'id della risorsa in defaultWP   nella funzione setWP e nella onCreateView settarla.

tipo:

 public void setWP(int id){
                defaultWP   =id;
        }

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Fragment not attached to Activity
« Risposta #4 il: 08 Ottobre 2014, 09:53:56 CEST »
0
E per la creazione aspetto la onViewCreated?

edit: ah, no, che scemo, non mi serve, tanto viene sempre chiamata la onCreateView.
Ora funziona, grazie :-)
« Ultima modifica: 08 Ottobre 2014, 10:42:21 CEST da Ilgard »

Offline nibbler

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Htc sensantion XL
  • Sistema operativo:
    windows 7
Re:Fragment not attached to Activity
« Risposta #5 il: 08 Ottobre 2014, 10:06:29 CEST »
0
E per la creazione aspetto la onViewCreated?


Puoi settarla nella OnAttach()!

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Fragment not attached to Activity
« Risposta #6 il: 08 Ottobre 2014, 15:58:17 CEST »
0
Ok, la cosa di per sé funziona, ma ho un problema assurdo: il fragment di indice 2 se ne frega dei comandi che gli do, se questi sono preceduti da una guardia, anche se true.
Mi spiego meglio: ecco il codice della onPageSelected nell'activity principale.


Codice (Java): [Seleziona]
        @Override
                        public void onPageSelected(int position) {

//                              if (position > old_pos ){
//                                      if (position == 3 && old_pos == 0) right_direction = false;
//                                      right_direction = true;
//                              }
//                              else if (position < old_pos ){
//                                      if (position == 1 && old_pos == 4) right_direction = true;
//                                      else right_direction = false;
//                              }

                                if (position == 3 ) rotazione = true;
                               
                                //Log.v("asd", "Rota " + rotazione);
                               
                                if (rotazione) fragments.get(2).setWP(immagini[8]);
//                              if (rotazione){
//                                      Log.v("asd", "Hurrà");
//                                     
//                              }
//                              else fragments.get(2).setWP(immagini[5]);
                               
//                              if ((indice >= 0) && (indice < l - 1) && rotazione){
//                                      /*Imposto le immagini*/
//                                     
//                                      if (position == 1){
//                                              fragments.get(0).setWP(immagini[indice - 1]);
//                                              //fragments.get(2).setWP(immagini[indice + 1]);
//                                              fragments.get(3).setWP(immagini[indice - 1]);
//                                      }
//                                      else if (position == 2){
//                                             
//                                              fragments.get(1).setWP(immagini[indice - 1]);
//                                              fragments.get(3).setWP(immagini[indice + 1]);
//                                              //fragments.get(2).setWP(immagini[5]);
//                                      }
//                                      else if (position == 3){
//                                              fragments.get(1).setWP(immagini[indice + 1]);
//                                              //fragments.get(2).setWP(immagini[indice - 1]);
//                                              fragments.get(4).setWP(immagini[indice + 1]);                                          
//                                      }
//                                     
//                                     
//                              }



                                if (position == 4 && rotazione){
                                        position = 1;
                                        old_pos = 0;
                                        mPager.setCurrentItem(position, false);
                                }
                                else if (position == 0 && rotazione){
                                        position = 3;
                                        old_pos = 4;
                                        mPager.setCurrentItem(position, false);
                                }
                                else{  
                                        old_pos = position;
                                        mPager.setCurrentItem(position);
                                        if (right_direction) indice++;
                                        else indice--;
                                }

}              

Rimuovendo la parte commentata (che serve, ma che al momento non è rilevante per l'errore), risulta:

Codice (Java): [Seleziona]
        @Override
                        public void onPageSelected(int position) {

                                if (position == 3 ) rotazione = true;

                                if (rotazione) fragments.get(2).setWP(immagini[8]);

                                if (position == 4 && rotazione){
                                        position = 1;
                                        old_pos = 0;
                                        mPager.setCurrentItem(position, false);
                                }
                                else if (position == 0 && rotazione){
                                        position = 3;
                                        old_pos = 4;
                                        mPager.setCurrentItem(position, false);
                                }
                                else{  
                                        old_pos = position;
                                        mPager.setCurrentItem(position);
                                        if (right_direction) indice++;
                                        else indice--;
                                }

}              
Il primo if mi serve perché arrivato alla terza pagina devo iniziare a ciclare i fragment.
Il blocco di if alla fine mi serve appunto per gestire il ciclo.

Il problema è dato da:
Codice (Java): [Seleziona]
if (rotazione) fragments.get(2).setWP(immagini[8]);Se lo lascio così mi mantiene perennemente l'immagine che ho settato al momento della creazione dell'oggetto. Se tolgo l'if invece la modifica.
Se però mantengo l'if, nonostante la guardia sia vera (è bastato mettere una stampa all'interno per provarlo), mi mantiene l'ultima immagine impostata e se ne frega di cambiarla.
Inoltre tutti gli altri fragment funzionano correttamente, solo questo da problemi.
Penso che l'errore sia una minuzia da qualche parte ma non riesco a trovarlo e ci sto diventando matto. Il resto del codice è lo stesso di prima, cambia solo la setWP nel PageFragment che l'ho modificata come consigliato.

Offline nibbler

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Htc sensantion XL
  • Sistema operativo:
    windows 7
Re:Fragment not attached to Activity
« Risposta #7 il: 08 Ottobre 2014, 16:07:21 CEST »
0
prova a settarla nella OnAttach() del fragment....non viene chiamata la onCreateview perchè magari riciclata...sicuro la onAttach si!

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Fragment not attached to Activity
« Risposta #8 il: 08 Ottobre 2014, 17:06:18 CEST »
0
Facendo:
Codice (Java): [Seleziona]
@Override
        public void onAttach(Activity activity) {
                super.onAttach(activity);
                ( (ImageView)activity.findViewById(R.id.wallpaper)).setBackground(getResources().getDrawable(defaultWP));
        }

ottengo:
Codice: [Seleziona]
10-08 11:04:37.860: E/AndroidRuntime(3065): java.lang.NullPointerException
10-08 11:04:37.860: E/AndroidRuntime(3065):         at it.anddev.bradipao.mercury.PageFragment.onAttach(PageFragment.java:49)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:825)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:768)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.support.v4.app.Fragment.setUserVisibleHint(Fragment.java:746)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:128)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.support.v4.view.ViewPager.populate(ViewPager.java:802)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1016)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.View.measure(View.java:16497)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.View.measure(View.java:16497)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.View.measure(View.java:16497)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.View.measure(View.java:16497)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.View.measure(View.java:16497)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.Choreographer.doCallbacks(Choreographer.java:574)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.Choreographer.doFrame(Choreographer.java:544)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.os.Handler.handleCallback(Handler.java:733)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.os.Handler.dispatchMessage(Handler.java:95)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.os.Looper.loop(Looper.java:136)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at android.app.ActivityThread.main(ActivityThread.java:5017)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at java.lang.reflect.Method.invokeNative(Native Method)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at java.lang.reflect.Method.invoke(Method.java:515)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
10-08 11:04:37.860: E/AndroidRuntime(3065):         at dalvik.system.NativeStart.main(Native Method)

Offline nibbler

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Htc sensantion XL
  • Sistema operativo:
    windows 7
Re:Fragment not attached to Activity
« Risposta #9 il: 08 Ottobre 2014, 17:15:44 CEST »
0
Intendevo dire :

onAttach()
{
                ImageView vv = (ImageView) view.findViewById(R.id.wallpaper);
                vv.setBackground(getResources().getDrawable(defaultWP));
}

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Fragment not attached to Activity
« Risposta #10 il: 08 Ottobre 2014, 17:20:59 CEST »
0
Fatto, ma il problema resta.
Per qualche motivo il fragment alla posizione 2 (quello che quindi risulta centrale) ha un comportamento diverso dagli altri: se, ad esempio, rimuovo nella onCreateView "((ImageView) view.findViewById(R.id.wallpaper)).setBackground(getResources().getDrawable(defaultWP));", il secondo fragment continua a mostrare la solita immagine mentre gli altri non mostrano nulla.

Post unito: [time]08 Ottobre 2014, 17:51:09 CEST[/time]
Ho provato ad usarne 6 di pagine ed il problema persiste nella seconda pagina.
Però ho notato che, con un ciclo di pagine di ritardo, la seconda pagina ha l'immagine corretta.
C'è un modo per forzare il refresh di un fragment (tipo una invalidate in un canvas)?

Post unito: 09 Ottobre 2014, 10:54:46 CEST
Sempre usandone 6 ho provato ad inserire anche una Text View nel Fragment (che so, magari era un problema delle immagini).
Il problema resta: il Fragment in posizione 2 (quindi il terzo) non viene aggiornato. Tutti gli altri funzionano correttamente.
« Ultima modifica: 09 Ottobre 2014, 10:54:46 CEST da Ilgard, Reason: Merged DoublePost »

Offline nibbler

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: +2
    • Mostra profilo
  • Dispositivo Android:
    Htc sensantion XL
  • Sistema operativo:
    windows 7
Re:Fragment not attached to Activity
« Risposta #11 il: 10 Ottobre 2014, 13:46:06 CEST »
0
Ciao

Prova un refactoring perchè non avendo il progetto intero non riesco a guardarlo...è sicuramente un problema legato all'uso degli indici..

E' un pò confusionaria la tua implementazione.....

Per esempio quando rotazione ritorna false?

Tipo
if (position == 3 )
    rotazione = true;
else
 rotazione = false;

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Fragment not attached to Activity
« Risposta #12 il: 10 Ottobre 2014, 17:34:15 CEST »
0
Quella implementazione era temporanea, volevo solo cercare di capire come mai mi ripete sempre la pagina 2.
Ora sto lavorando per riuscire, almeno, a far funzionare correttamente la rotazione, perché al momento faccio un gran casino.

Offline Ilgard

  • Utente junior
  • **
  • Post: 64
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Xperia M
  • Sistema operativo:
    Ubuntu 14.04
Re:Fragment not attached to Activity
« Risposta #13 il: 11 Ottobre 2014, 17:52:11 CEST »
0
L'ho modificato ed ora sembra funzionare. Il problema del fragment 2 è che sembra che il sistema voglia che i contenuti vengano aggiornati con un certo anticipo (forse perché per ridurre i consumi usa versioni in cache).
Comunque, se hai voglia di provare, qui c'è l'archivio con il progetto.
Grazie per l'aiuto :D