2011-11-08 55 views
9

在我的应用程序有时我收到此错误:ViewFlipper:接收未注册

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) 

这是什么?我该怎么办?需要一些帮助,请...

下面是一些代码:

onCreate()方法我有这样的:

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

其中填入方法是这样的:

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

你可以在这里放一些代码吗? –

+0

现在我发现这个http://daniel-codes.blogspot.com/2010/05/viewflipper-receiver-not-registered.html。我使用的是2.1版本的设备,所以这里看起来就是这个问题:( – Gabrielle

+0

)如果我没有将设备放在横向模式下,我会得到这个错误。该应用仅适用于横向模式,如果设备是保持在肖像模式我得到一个力量接近。问题在哪里? – Gabrielle

回答

34

Daniel Lew's solution

创建这个班级

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(); 
     } 
    } 
} 

,并在布局不使用正常ViewFlipper,使用GabrielleViewFlipper:

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

不再适用于我的同样的问题 –

5

尝试加入这个类项目:

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) {} 
    } 
} 

,然后用它来代替常规的ViewFlipper in your XML:

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

编辑

由于这个问题似乎具体到Android 2.1(API 7),可以确保您只通过复制布局文件(S)与ViewFlipperres/layout-v7,然后改变目标这一变化ViewFlipperContentViewFlipper这些布局。这样,只有运行Android 2.1的设备才会使用该修补程序。

+2

我认为不仅仅是为了Android 2.1 ...它似乎也出现在Android 2.2上,它是这样工作的。 – Gabrielle

+1

我也在2.3.4设备上收到此错误 – rf43