本文介绍了ViewFlipper:接收未注册的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序,有时我收到此错误:

  java.lang.IllegalArgumentException:如果接收器未注册:android.widget.ViewFlipper$1@4806a4a8
在android.app.ActivityThread $ PackageInfo.forgetReceiverDispatcher(ActivityThread.java:667)
在android.app.ApplicationContext.unregisterReceiver(ApplicationContext.java:840)
在android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:321)
在android.widget.ViewFlipper.onDetachedFromWindow(ViewFlipper.java:104)
在android.view.View.dispatchDetachedFromWindow(View.java:5891)
在android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1076)
在android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1074)
在android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1074)
在android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1074)
在android.view.ViewRoot.dispatchDetachedFromWindow(ViewRoot.java:1570)
在android.view.ViewRoot.doDie(ViewRoot.java:2565)
在android.view.ViewRoot.die(ViewRoot.java:2535)
在android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:218)
在android.view.Window $ LocalWindowManager.removeViewImmediate(Window.java:436)
在android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3498)
在android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3599)
在android.app.ActivityThread.access $ 2300(ActivityThread.java:119)
在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1867)
 在android.os.Handler.dispatchMessage(Handler.java:99)
在android.os.Looper.loop(Looper.java:123)
在android.app.ActivityThread.main(ActivityThread.java:4363)
在java.lang.reflect.Method.invokeNative(本机方法)
在java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:862)
在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
在dalvik.system.NativeStart.main(本机方法)
 

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

下面是一些code:

的onCreate()方法,我有这样的:

  VF =(ViewFlipper)findViewById(R.id.details);
        vf.setFlipInterval(3000);
        vf.startFlipping();
        填充();
 

,其中填充的方法是这样的:

 私人无效填充(){
        的for(int i = 0; I< jArray.length();我++){
            的System.out.println(lungime+ jArray.length());
            的LinearLayout L =新的LinearLayout(本);
            l.setLayoutParams(新的LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.FILL_PARENT));
            l.setBackgroundColor(0x000000处);
            l.setOrientation(LinearLayout.VERTICAL);
            vf.addView(升);

            文件F =新的文件(Environment.getExternalStorageDirectory()
                    +/下载/);

            文件[]文件= f.listFiles();

            点阵位图= BitmapFactory.de codeFILE(文件[I] .getPath());
            IMG =新ImageView的(这一点);
            img.setLayoutParams(新的LayoutParams(LayoutParams.FILL_PARENT,
                    LayoutParams.FILL_PARENT));

            img.setImageBitmap(位);

            的System.out.println(目标目标+ [I]);
            img.setOnTouchListener(本);
            img.setId(ⅰ);

            l.addView(IMG);
            IMG = NULL;

        }
 

解决方案

据的,

创建这个类

 进口android.content.Context;
进口android.util.AttributeSet;
进口android.widget.ViewFlipper;

公共类GabrielleViewFlipper扩展ViewFlipper {
    公共GabrielleViewFlipper(上下文的背景下){
        超(上下文);
    }
    公共GabrielleViewFlipper(上下文的背景下,ATTRS的AttributeSet){
        超(背景下,ATTRS);
    }
    @覆盖
    保护无效onDetachedFromWindow(){
        尝试 {
            super.onDetachedFromWindow();
        }
        赶上(抛出:IllegalArgumentException E){
            stopFlipping();
        }
    }
}
 

和在布局中不使用正常的ViewFlipper,使用GabrielleViewFlipper:

 < your.package.GabrielleViewFlipper
    。
    。
    。
< /your.package.GabrielleViewFlipper>
 

In my app sometimes I receive this error :

 java.lang.IllegalArgumentException: Receiver not registered: android.widget.ViewFlipper$1@4806a4a8
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)

What's this? What should I do? Need some help please...

Here is some code :

on onCreate() method I have this :

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

where populate method is this :

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;

        }
解决方案

According to Daniel Lew's solution,

Create this class

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

and in your layout dont use the normal ViewFlipper, use GabrielleViewFlipper:

<your.package.GabrielleViewFlipper
    .
    .
    .
</your.package.GabrielleViewFlipper>

这篇关于ViewFlipper:接收未注册的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-07 09:32