本文介绍了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:接收未注册的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!