Issue
I am trying to create a boom Menu.my device is an android 10.Am using BoomMenu 2.1.1 this is my xml code .Problem is that my activity crushes when opened with the below error
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:437)
at com.nightonke.boommenu.BoomMenuButton.createPieces(BoomMenuButton.java:408)
at com.nightonke.boommenu.BoomMenuButton.doLayoutJobs(BoomMenuButton.java:390)
at com.nightonke.boommenu.BoomMenuButton.onLayout(BoomMenuButton.java:376)
at android.view.View.layout(View.java:22090)
at android.view.ViewGroup.layout(ViewGroup.java:6358)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1103)
at android.view.View.layout(View.java:22090)
at android.view.ViewGroup.layout(ViewGroup.java:6358)
at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1775)
at android.view.View.layout(View.java:22090)
at android.view.ViewGroup.layout(ViewGroup.java:6358)
at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:142)
at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:41)
at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1556)
at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:888)
at android.view.View.layout(View.java:22090)
at android.view.ViewGroup.layout(ViewGroup.java:6358)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:22090)
at android.view.ViewGroup.layout(ViewGroup.java:6358)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:22090)
at android.view.ViewGroup.layout(ViewGroup.java:6358)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at android.view.View.layout(View.java:22090)
at android.view.ViewGroup.layout(ViewGroup.java:6358)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
at android.view.View.layout(View.java:22090)
at android.view.ViewGroup.layout(ViewGroup.java:6358)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
at com.android.internal.policy.DecorView.onLayout(DecorView.java:783)
at android.view.View.layout(View.java:22090)
at android.view.ViewGroup.layout(ViewGroup.java:6358)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3239)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2735)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1821)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7916)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:980)
at android.view.Choreographer.doCallbacks(Choreographer.java:804)
at android.view.Choreographer.doFrame(Choreographer.java:739)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:965)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:264)
Below is my current xml and java code.I set bmb_buttonEnum
and bmb_piecePlaceEnum
and bmb_buttonPlaceEnum
from my activity(Even without setting or instantiating the BoomMenuButton,still crushes on openint the activity)
<com.nightonke.boommenu.BoomMenuButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="@dimen/fab_margin"
android:id="@+id/bmb"
/>
developer_options = (BoomMenuButton) rootView.findViewById(R.id.bmb);
developer_options.setButtonEnum(ButtonEnum.Ham);
developer_options.setPiecePlaceEnum(PiecePlaceEnum.HAM_3);
developer_options.setButtonPlaceEnum(ButtonPlaceEnum.HAM_3);
i had tried to use the below with nothing on the activity side but stil crushes
<com.nightonke.boommenu.BoomMenuButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="@dimen/fab_margin"
app:bmb_buttonEnum="ham"
app:bmb_piecePlaceEnum="piecePlace_ham_4"
app:bmb_buttonPlaceEnum="buttonPlace_ham_4"
android:id="@+id/bmb"
/>
Solution
After you set button-enum, piece-place-enum, and button-place-enum
in .xml or .java, you have to initialize the builder for each button in your activity.
Create an array of images to show on each boomButton (unless you want them to be the same)
Integer[] bmbImages = {R.drawable.ic_image, R.drawable.ic_image2, R.drawable.ic_image3}
Create an array for the text inside
String[] bmbText = {getString(R.string.your_string), getString(R.string.text2), getString(R.string.text3)};
Loop through each boomButton to customize
for (int i = 0; i < developer_options.getPiecePlaceEnum().pieceNumber(); i++) {
HamButton.Builder builder = new HamButton.Builder()
.normalImageRes(bmbImages[i])
.normalTextRes(bmbText[i])
.subNormalTextRes("array of subtext here");
developer_options.addBuilder(builder);}
Here is the link where I got this information from: BoomMenu on GitHub
Answered By - Shein Arcium
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.