1

Is getting below warning when I open bottomDialogFragemnt and it's drag and dismiss when we slide scroll right or left side on BottomDialogFragment and no other information details in Logcat of the android studio.

java.lang.NoSuchFieldException: No field mBehavior in class 
    Landroid/support/design/widget/BottomSheetDialog; (declaration of 
   'android.support.design.widget.BottomSheetDialog' )
System.err:     at java.lang.Class.getDeclaredField(Native Method)
System.err:     at android.support.v4.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:330)
System.err:     at android.support.v4.app.Fragment.performGetLayoutInflater(Fragment.java:1308)
System.err:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
System.err:     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
System.err:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
System.err:     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
System.err:     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
System.err:     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
System.err:     at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
System.err:     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
System.err:     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
System.err:     at android.os.Handler.handleCallback(Handler.java:751)
System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
System.err:     at android.os.Looper.loop(Looper.java:154)
System.err:     at android.app.ActivityThread.main(ActivityThread.java:6816)
System.err:     at java.lang.reflect.Method.invoke(Native Method)
System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1565)
System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1453)

I have written below code in BottoDialogFragment:

//      Log.i(TAG, "dragging()");
            Field mBehaviorField = bottomSheetDialog.getClass().getDeclaredField("mBehavior");
            mBehaviorField.setAccessible(true);
            final BottomSheetBehavior behavior =
                    (BottomSheetBehavior) mBehaviorField.get(bottomSheetDialog);
            behavior.setHideable(false);

And also used below move event of BottomDialogFragment:

/*Back press event fire*/
        bottomSheetDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(android.content.DialogInterface dialog,
                                 int keyCode, android.view.KeyEvent event) {

                if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
                    // To dismiss the fragment when the back-button is pressed.
                    Log.i(TAG, "onKey:KEYCODE_BACK ");
                    if (isRecordAudioAdd) {
                        if (mFilename != null && mFilename.length() > 0 && RecTime != 0) {
                            openDialog(mFilename, RecTime);
                        } else {
                            dismissAllowingStateLoss();
                        }
                        return true;
                    } else {
                        dismissAllowingStateLoss();
                    }
                    return true;
                }
                /*// Otherwise, do nothing else
                else return false;*/
                return false;
            }
        });
Zoe
  • 27,060
  • 21
  • 118
  • 148
axita.savani
  • 406
  • 1
  • 6
  • 21

1 Answers1

1

I have found the solution of this warning message :

 /* ************** dragging off******************* */
    try {
        //      Log.i(TAG, "dragging()");
        Field mBehaviorField = bottomSheetDialog.getClass().getDeclaredField("behavior");
        mBehaviorField.setAccessible(true);
        final BottomSheetBehavior behavior =
                (BottomSheetBehavior) mBehaviorField.get(bottomSheetDialog);
        behavior.setHideable(false);

    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }

update the behavior as bottomSheetDialog.getClass().getDeclaredField("mBehavior"); to bottomSheetDialog.getClass().getDeclaredField("behavior");

axita.savani
  • 406
  • 1
  • 6
  • 21