2011-11-08 15 views
9

W moim app czasami otrzymuję ten błąd:ViewFlipper: odbiornik nie zarejestrowany

java.lang.IllegalArgumentException: Receiver not registered: [email protected] 
at android.app.ActivityThread$PackageInfo.forgetReceiverDispatcher(ActivityThread.java:667) 
at android.app.ApplicationContext.unregisterReceiver(ApplicationContext.java:840) 
at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:321) 
at android.widget.ViewFlipper.onDetachedFromWindow(ViewFlipper.java:104) 
at android.view.View.dispatchDetachedFromWindow(View.java:5891) 
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1076) 
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1074) 
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1074) 
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1074) 
at android.view.ViewRoot.dispatchDetachedFromWindow(ViewRoot.java:1570) 
at android.view.ViewRoot.doDie(ViewRoot.java:2565) 
at android.view.ViewRoot.die(ViewRoot.java:2535) 
at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:218) 
at android.view.Window$LocalWindowManager.removeViewImmediate(Window.java:436) 
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3498) 
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3599) 
at android.app.ActivityThread.access$2300(ActivityThread.java:119) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1867) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:4363) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:521) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 
at dalvik.system.NativeStart.main(Native Method) 

Co to jest? Co powinienem zrobić? Potrzebuję pomocy proszę ...

Oto kod:

na onCreate() sposób mam to:

vf = (ViewFlipper) findViewById(R.id.details); 
     vf.setFlipInterval(3000); 
     vf.startFlipping(); 
     populate(); 

gdzie metoda Populate to:

private void populate() { 
     for (int i = 0; i < jArray.length(); i++) { 
      System.out.println("lungime" + jArray.length()); 
      LinearLayout l = new LinearLayout(this); 
      l.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
        LayoutParams.FILL_PARENT)); 
      l.setBackgroundColor(0x000000); 
      l.setOrientation(LinearLayout.VERTICAL); 
      vf.addView(l); 

      File f = new File(Environment.getExternalStorageDirectory() 
        + "/Downloads/"); 

      File[] files = f.listFiles(); 

      Bitmap bitmap = BitmapFactory.decodeFile(files[i].getPath()); 
      img = new ImageView(this); 
      img.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
        LayoutParams.FILL_PARENT)); 

      img.setImageBitmap(bitmap); 

      System.out.println("target " + target[i]); 
      img.setOnTouchListener(this); 
      img.setId(i); 

      l.addView(img); 
      img = null; 

     } 
+0

czy możesz umieścić tutaj kod? –

+0

znalazłem teraz http://daniel-codes.blogspot.com/2010/05/viewflipper-receiver-not-registered.html. Używam urządzenia cu wersja 2.1, więc tutaj wygląda na to problem :( – Gabrielle

+0

Dostaję ten błąd, jeśli nie trzymam urządzenia na ręce w trybie poziomym.Aplikacja jest tylko dla trybu poziomego i jeśli urządzenie jest trzymany w trybie portretowym Dostaję siłę blisko Gdzie jest problem? – Gabrielle

Odpowiedz

34

Według Daniel Lew's solution ,

Utwórz klasę

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.ViewFlipper; 

public class GabrielleViewFlipper extends ViewFlipper { 
    public GabrielleViewFlipper(Context context) { 
     super(context); 
    } 
    public GabrielleViewFlipper(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    @Override 
    protected void onDetachedFromWindow() { 
     try { 
      super.onDetachedFromWindow(); 
     } 
     catch (IllegalArgumentException e) { 
      stopFlipping(); 
     } 
    } 
} 

aw układzie nie używaj normalnego ViewFlipper użyć GabrielleViewFlipper:

<your.package.GabrielleViewFlipper 
    . 
    . 
    . 
</your.package.GabrielleViewFlipper> 
+0

znowu nie działa dla mnie ten sam problem –

5

spróbuj dodać tę klasę do projektu:

public class ContentViewFlipper extends ViewFlipper { 
    public ContentViewFlipper(Context context) { 
     super(context); 
    } 

    public ContentViewFlipper(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onDetachedFromWindow() { 
     try { 
     super.onDetachedFromWindow(); 
     } 
     catch(Exception e) {} 
    } 
} 

a następnie używać go zamiast regularne ViewFlipper w swoim XML:

<com.yourPackage.ContentViewFlipper 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

Edit

Jak tego problemu wydaje się być specyficzny dla Androida 2.1 (API 7), można upewnić się, że tylko cel tej zmiany kopiując plik (e) Układ z ViewFlipper do res/layout-v7 a następnie zmieniając ViewFlipper do ContentViewFlipper w tych układach. W ten sposób tylko urządzenia z systemem Android 2.1 będą używać tej poprawki.

+2

Wydaje mi się, że jest nie tylko dla Androida 2.1 ... wydaje się również pojawiać w systemie Android 2.2 To działa w ten sposób. – Gabrielle

+1

Ten błąd pojawia się także na urządzeniach 2.3.4 – rf43

Powiązane problemy