読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

SnackBarはScrollView上では表示できない

概要

ScrollViewを使用した画面でSnackBarを使おうとしたら下記エラーが出て使えなかった

java.lang.IllegalStateException: ScrollView can host only one direct child
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at android.widget.ScrollView.addView(ScrollView.java:237)
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at android.support.design.widget.Snackbar.showView(Snackbar.java:372)
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at android.support.design.widget.Snackbar$1.handleMessage(Snackbar.java:106)
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:98)
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:136)
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5001)
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:515)
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
10-05 15:53:44.779 13887-13887/? E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)

その対処法

詳細

ScrollViewは一画面に対して一番上の親に一つしか存在できない
>ScrollView can host only one direct child

しかしSnackBarはどうやら一番上の画面に表示しようとするらしくScrollViewを使っている画面では上記エラーが発生してしまう
これを回避するにはandroid.support.v4.widget.NestedScrollViewを使い、スクロールを表現するようにする
NestedScrollView | Android Developers