#android #viewflipper #receiver
#Android #viewflipper #приемник
Вопрос:
В моем приложении иногда я получаю эту ошибку :
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)
Что это? Что мне делать? Нужна помощь, пожалуйста…
Вот некоторый код :
в 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;
}
Комментарии:
1. теперь я нашел это daniel-codes.blogspot.com/2010/05 /… . Я использую устройство cu версии 2.1, так что, похоже, проблема заключается вот в чем: (
2. Я получаю эту ошибку, если не держу устройство под рукой в альбомном режиме. Приложение предназначено только для альбомной ориентации, и если устройство находится в портретном режиме, я получаю принудительное закрытие. В чем проблема?
Ответ №1:
В соответствии с решением Дэниела Лью, создайте этот класс:
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>
Ответ №2:
Попробуйте добавить этот класс в свой проект:
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
в вашем XML:
<com.yourPackage.ContentViewFlipper
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
Редактировать
Поскольку эта проблема, похоже, специфична для Android 2.1 (API 7), вы можете убедиться, что вы нацелены только на это изменение, скопировав файлы макета с ViewFlipper
на res/layout-v7
, а затем изменив ViewFlipper
на ContentViewFlipper
в этих макетах. Таким образом, исправление будут использовать только устройства под управлением Android 2.1.
Комментарии:
1. Я думаю, что это не только для Android 2.1…it кажется, тоже появляется на Android 2.2. Он работает следующим образом.