2015-10-17 15 views
7

Android Floating Action Button Lib UsedNULLポインタ例外():futuresimple /浮動アクションボタン

私はxmlファイル内のアクションメニューをフローティングし、このフローティングアクションメニューの下でダイナミックフローティングアクションボタンを作成する作成しました。私はそれぞれのFABに画像ビットマップを設定しています。特定の条件では、フローティングアクションメニューのすべてのボタンを削除する必要があります。 onMeasure()方法で子供の可視性を取得しようとしているときでもremoveView()方法で、私は、子オブジェクトにNull Pointer Exceptionを取得しています。以下は、スタックトレースと私のコードです。動的に削除するフローティングアクションボタンを追加するための

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 

コード:

 @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

あなたは()メソッドのonMeasureを投稿できます。 FloatingActionsMenu.java:224という行を含んでいませんか? –

+0

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

+0

menuMultipleActions.removeButton()を使用してみてください。 removeViewの代わりに?それをBeacuseは、その子のためのメソッドでいくつかのフラグを内部的に操作します。 –

答えて

3

menuMultipleActions.removeButton()代わりの方法removeView()のを使用してみてください。内部的には、removeButtonはいくつかのフラグを操作します。

FloatingActionButton.java

+0

'IF(!menuMultipleActions = NULL){ため (INT i = 0; I <= mSelectedImages.size(); iは++){ のSystem.out.println( "i値==>" + I)。 menuMultipleActions.removeButton((FloatingActionButton)menuMultipleActions.getChildAt(I))。 } } ' –

2

与えられたコードには2つの問題があります。まず、ViswanathはremoveViewを(使用して、上記の指摘するように)常にクラッシュし、以下のよう(にかかわらず、ループの)

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

第二の問題は、ループを使用すると、各ボタンに数を削除する理由としてを通じて常にクラッシュ途中ということですmenuMultipleActionsのビューは1つ減少します。これを解決するには、後方ループするだろうか、私はボタンの数を見つけるのより安全な方法としてmenuMultipleActions.getChildCount()を使用する傾向かもしれませんが、常にゼロ番目の子など

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

を削除します。ループ内で動作するまたはIDで任意の単一のボタンを削除する

より一般的な解決法は、前にそれを削除するボタンを見つけるためfindViewByIdを使用することであろう。ラベルがFloatingActionButtonのために設定されている場合は、実装がタグとしてラベルを使用しているため、例えば

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

あなたもfindViewByTagを使用することができます。

関連する問題