2015-10-17 26 views
7

Android Floating Action Button Lib UsedNull pointer exception trên con ở onMeasure(): futuresimple/nổi-action-nút

tôi tạo ra Floating Action Menu trong xml file và tạo Floating nút Action động dưới này Floating Action Menu. Tôi đang thiết lập bitmap hình ảnh trên mỗi FAB. Ở một số điều kiện cụ thể, tôi phải xóa tất cả các nút trong Menu Hành động Nổi. Nhưng trên phương pháp removeView(), tôi nhận được Null Pointer Exception đối tượng con, khi nó đang cố gắng để có được khả năng hiển thị của trẻ em trong phương pháp onMeasure(). Dưới đây là ngăn xếp dấu vết và mã của tôi.

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getVisibility()' on a null object reference 
     at com.getbase.floatingactionbutton.FloatingActionsMenu.onMeasure(FloatingActionsMenu.java:224) 
     at android.view.View.measure(View.java:17565) 
     at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1263) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
     at android.widget.ScrollView.onMeasure(ScrollView.java:337) 
     at android.view.View.measure(View.java:17565) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
     at android.view.View.measure(View.java:17565) 
     at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:940) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
     at android.view.View.measure(View.java:17565) 
     at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727) 
     at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
     at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2045) 
     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1196) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1409) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
     at android.view.Choreographer.doFrame(Choreographer.java:550) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
     at android.os.Handler.handleCallback(Handler.java:746) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5343) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(Z 

Mã để thêm một nút hành động nổi loại bỏ động:

 @Override 
     public void onTap() { 

       if (menuMultipleActions != null) { 
       for (int i = 1; i <= mSelectedImages.size(); i++) { 
       System.out.println("i value ==> " + i); 
       menuMultipleActions.removeView(menuMultipleActions.getChildAt(i)); 
      } 
     } 
     mSelectedImages.clear(); 
     } 


    @Override 
    public void onPictureTaken(String filePath) { 
      mSelectedImages.add(filePath); 
      menuMultipleActions = (FloatingActionsMenu) findViewById(R.id.multiple_action); 
      Snackbar.make(this.findViewById(android.R.id.content), "size = " + mSelectedImages.size(), Snackbar.LENGTH_SHORT).show(); 
     if (mSelectedImages.size() > 0) { 
      for (int num = 0; num < mSelectedImages.size(); num++) { 
       floatingActionButton = new  com.getbase.floatingactionbutton.FloatingActionButton(getBaseContext()); 
        floatingActionButton.setSize(com.getbase.floatingactionbutton.FloatingActionButton.SIZE_MINI); 
        floatingActionButton.setImageBitmap(getImageFromPath(mSelectedImages.get(num))); 
       floatingActionButton.setId(num); 
       menuMultipleActions.addButton(floatingActionButton); 
      } 
     } 
    } 
+0

Bạn có thể đăng phương thức onMeasure() hay không. dòng chữ nổi FloatingActionsMenu.java:224? –

+0

https://github.com/futuresimple/android-floating-action-button/blob/master/library/src/main/java/com/getbase/floatingactionbutton/FloatingActionsMenu.java –

+0

Bạn có thể thử sử dụng menuMultipleActions.removeButton() không thay vì removeView? Beacuse nó nội bộ thao tác một số cờ trong phương pháp cho con của nó. –

Trả lời

3

Hãy thử sử dụng menuMultipleActions.removeButton() thay vì removeView() phương pháp. Nội bộ các removeButton thao tác một số cờ.

FloatingActionButton.java

+0

'if (menuMultipleActions! = Null) { cho (int i = 0; i <= mSelectedImages.size(); i ++) { System.out.println (" i value ==> "+ i); menuMultipleActions.removeButton ((FloatingActionButton) menuMultipleActions.getChildAt (i)); } } ' –

2

Có hai vấn đề với mã nhất định. Thứ nhất, như Viswanath chỉ ra ở trên sử dụng removeView() như dưới đây luôn bị treo (không phụ thuộc vào vòng lặp)

menuMultipleActions.removeView(menuMultipleActions.getChildAt(0)); 

Vấn đề thứ hai là vòng lặp sẽ cách phần luôn tai nạn thông qua bởi vì khi bạn xóa mỗi nút số số lượt xem trong menuMultipleActions giảm một. Các giải pháp này hoặc là sẽ để lặp ngược, hoặc luôn xóa 0 trẻ ví dụ

if (menuMultipleActions != null) { 
    for (int i = 0; i < mSelectedImages.size(); i++) { 
     System.out.println("i value ==> " + i); 
     menuMultipleActions.removeButton((FloatingActionButton) menuMultipleActions.getChildAt(0)); 
    } 
} 

Mặc dù tôi có thể nghiêng hơn để sử dụng menuMultipleActions.getChildCount() như là một cách an toàn hơn của việc tìm kiếm số lượng nút.

Giải pháp tổng quát hơn, sẽ hoạt động trong vòng lặp hoặc xóa bất kỳ nút nào theo id sẽ là sử dụng findViewById để tìm nút trước khi xóa. ví dụ:

FloatingActionButton fab = (FloatingActionButton) menuMultipleActions.findViewById(ButtonId); 
if (fab != null) menuMultipleActions.removeButton(fab); 

Nếu nhãn được đặt cho FloatingActionButton bạn cũng có thể sử dụng findViewByTag vì việc triển khai sử dụng nhãn làm thẻ.

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