2011-11-08 35 views
9

Trong ứng dụng của tôi đôi khi tôi nhận được lỗi này:ViewFlipper: Receiver không đăng ký

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) 

này là gì? Tôi nên làm gì? Cần giúp đỡ xin vui lòng ...

Dưới đây là một số mã:

trên onCreate() phương pháp tôi có điều này:

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

nơi phương pháp populate là thế này:

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

bạn có thể đặt ở đây một số mã không? –

+0

bây giờ tôi đã tìm thấy http://daniel-codes.blogspot.com/2010/05/viewflipper-receiver-not-registered.html này. Tôi đang sử dụng một thiết bị cu phiên bản 2.1, vì vậy ở đây có vẻ là vấn đề: ( – Gabrielle

+0

Tôi nhận được lỗi này nếu tôi không giữ thiết bị trên tay trên chế độ phong cảnh. Ứng dụng này chỉ dành cho chế độ ngang và nếu thiết bị là Trường hợp là vấn đề? – Gabrielle

Trả lời

34

Theo Daniel Lew's solution ,

Tạo lớp này

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

và trong cách bố trí của bạn không sử dụng ViewFlipper bình thường, sử dụng GabrielleViewFlipper:

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

không làm việc cho tôi một lần nữa cùng một vấn đề –

5

Hãy thử thêm lớp này để dự án của bạn:

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

Và sau đó sử dụng nó thay vì thường xuyên ViewFlipper trong XML của bạn:

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

Sửa

Như vấn đề này dường như là đặc trưng cho Android 2.1 (API 7), bạn có thể chắc chắn rằng bạn chỉ nhắm mục tiêu thay đổi này bằng cách sao chép các tập tin layout (s) với ViewFlipper-res/layout-v7 và sau đó thay đổi ViewFlipper đến ContentViewFlipper trong các bố cục đó. Bằng cách này, chỉ các thiết bị chạy Android 2.1 mới sử dụng bản sửa lỗi.

+2

Tôi nghĩ rằng không chỉ cho Android 2.1 ... nó dường như xuất hiện trên Android 2.2 quá.Đó là làm việc như thế này. – Gabrielle

+1

Tôi cũng nhận được lỗi này trên 2.3.4 thiết bị – rf43

Các vấn đề liên quan