BoomMenu
BoomMenu copied to clipboard
Limited Pieces&Button and set onclick listener
Trying to implement Ham Button with 6 Pieces&Button. ClickOnListener for any button to new activity with button title. How do i do this? Help me bro.
Click event wiki will tell you.
Thank you very much Bro. I got It !:)
IndexOutOfBound issue I have set the limited Pieces&Button in BuilderManager and used ListenerExample like this in MainActivity as, assert bmb != null; bmb.setButtonEnum(ButtonEnum.Ham); bmb.setPiecePlaceEnum(PiecePlaceEnum.HAM_6); bmb.setButtonPlaceEnum(ButtonPlaceEnum.HAM_6);
for (int i = 0; i < bmb.getPiecePlaceEnum().pieceNumber(); i++) addBuilder();
bmb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
// Use OnBoomListenerAdapter to listen part of methods
bmb.setOnBoomListener(new OnBoomListenerAdapter() {
@Override
public void onBoomWillShow() {
super.onBoomWillShow();
}
});
}
private void addBuilder() {
bmb.addBuilder(new HamButton.Builder()
.normalImageRes(BuilderManager.getImageResource())
.normalText(BuilderManager.getTitleResource())
.subNormalText(BuilderManager.getSubTitleResource())
.listener(new OnBMClickListener() {
@Override
public void onBoomButtonClick(int index) {
Toast.makeText(getApplicationContext(), "Selected" + index,
Toast.LENGTH_SHORT).show();
//textViewForButton.setText("No." + index + " boom-button is clicked!");
}
}));
}
This throwing Error at run time and appearing in Xml layout too.. IndexOutOfBound Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:604) at java.util.ArrayList.get(ArrayList.java:382) at sked.boommenu.BoomMenuButton.createPieces(BoomMenuButton.java:404) at sked.boommenu.BoomMenuButton.doLayoutJobs(BoomMenuButton.java:386) at sked.boommenu.BoomMenuButton.onLayout_Original(BoomMenuButton.java:372) at sked.boommenu.BoomMenuButton.onLayout(BoomMenuButton.java:-1)
Is there anything i need to change in BoomMenuButton?
This is quite a strange crash... Could you please provide the xml code and the total log of the crash? Thank you.
Sure, xml layout
fragment_bmb <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" tools:context="crystal.sked.boommenu.BMBFragment">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="40sp"
android:gravity="center"/>
<sked.boommenu.BoomMenuButton
android:id="@+id/bmb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_marginBottom="20dp"
app:bmb_normalColor="@android:color/holo_blue_bright"
app:bmb_highlightedColor="@android:color/holo_blue_dark"
app:bmb_buttonEnum="simpleCircle"
app:bmb_piecePlaceEnum="piecePlace_dot_9_1"
app:bmb_buttonPlaceEnum="buttonPlace_sc_9_1"
app:bmb_inFragment="true" />
<sked.boommenu.BoomMenuButton
android:id="@+id/bmb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="20dp"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
app:bmb_normalColor="@android:color/holo_orange_light"
app:bmb_highlightedColor="@android:color/holo_orange_dark"
app:bmb_buttonEnum="simpleCircle"
app:bmb_piecePlaceEnum="piecePlace_dot_9_1"
app:bmb_buttonPlaceEnum="buttonPlace_sc_9_1"
app:bmb_boomInWholeScreen="false"
app:bmb_inFragment="true" />
rendering error on xml java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.rangeCheck(ArrayList.java:604) at java.util.ArrayList.get(ArrayList.java:382) at sked.boommenu.BoomMenuButton.createPieces(BoomMenuButton.java:404) at sked.boommenu.BoomMenuButton.doLayoutJobs(BoomMenuButton.java:386) at sked.boommenu.BoomMenuButton.onLayout_Original(BoomMenuButton.java:372) at sked.boommenu.BoomMenuButton.onLayout(BoomMenuButton.java:-1) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.support.v7.widget.ActionBarOverlayLayout.onLayout_Original(ActionBarOverlayLayout.java:437) at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:-1) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079) at android.view.View.layout(View.java:16630) at android.view.ViewGroup.layout(ViewGroup.java:5437) Copy stack to clipboard (2 similar errors not shown)
RunTime Error on Execution, 06-03 08:51:13.246 9021-9021/sked E/AndroidRuntime: FATAL EXCEPTION: main Process: crystal.sked, PID: 9021 java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at sked.boommenu.BoomMenuButton.placePiecesAtPositions(BoomMenuButton.java:420) at crystal.sked.boommenu.BoomMenuButton.doLayoutJobs(BoomMenuButton.java:389) at crystal.sked.boommenu.BoomMenuButton.onLayout(BoomMenuButton.java:372) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutHorizontal(LinearLayout.java:1660) at android.widget.LinearLayout.onLayout(LinearLayout.java:1436) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525) at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453) at android.widget.FrameLayout.onLayout(FrameLayout.java:388) at android.view.View.layout(View.java:14817) at android.view.ViewGroup.layout(ViewGroup.java:4631) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:544) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method) 06-03 08:56:13.876 9021-9021/sked I/Process: Sending signal. PID: 9021 SIG: 9
Are you using the newest version(2.1.0) of BMB? I didn't get any useful information from the crash-log. I suggest you to try the newest version. If it still crash, you can send the codes to me([email protected]). I will have a check. Thanks.
Yes same version only, Gradle Version: 2.10 Android Plugin Version: 2.1.0 JDK is 8
Will try to send the code! one more thing i have come across the site while searching for the issue, https://examples.javacodegeeks.com/java-basics/exceptions/java-lang-arrayindexoutofboundsexception-how-to-handle-array-index-out-of-bounds-exception/
is there any code needs change depends on jdk7 and jdk8 for array issue
just got time to write.., The cause of issue was i commented some lines in PiecePlaceEnum..after un-comment it not throw the error..just clean and rebuild helps to run..(it was my mistake).
Hi Bro, I am getting ClassCastException issue on device for onBoomButtonClick, the same error is not throwing while running in emulator. emulator : API 19(4.4.2), Device : Asus_Z00LD, API 5.0.2(Lollypop).
LogCat:
java.lang.ClassCastException: android.graphics.drawable.StateListDrawable cannot be cast to android.graphics.drawable.GradientDrawable
at sked.boommenu.Util.getRectangleDrawable(Util.java:160)
at sked.boommenu.BoomButtons.BoomButton.initHamButtonDrawable(BoomButton.java:438)
at sked.boommenu.BoomButtons.BoomButton.initHamButton(BoomButton.java:478)
at sked.boommenu.BoomButtons.HamButton.init(HamButton.java:35)
at sked.boommenu.BoomButtons.HamButton.
That's too weird. This is the method Util.getRectangleDrawable
:
public static GradientDrawable getRectangleDrawable(View view, int cornerRadius, int color) {
GradientDrawable gradientDrawable = (GradientDrawable) getDrawable(
view,
R.drawable.shape_rectangle_normal);
gradientDrawable.setCornerRadius(cornerRadius);
gradientDrawable.setColor(color);
return gradientDrawable;
}
And the shape_rectangle_normal
is absolutely a shape-drawable-xml
file. It should be a GradientDrawable
when creating from the resource file. I wonder whether this happens because the cache mechanism when loading drawable in Android. Maybe you can try to uninstall your app and try again.
Yes tried uninstall/reinstall but still throwing the classcastexcception error..
Hi @venkateshj99 !
I got same your error. I can fix that by my way :D (ver 2.1.0)
I try removing attribute of BoomMenu in xml:
app:bmb_normalColor="@android:color/holo_orange_light" app:bmb_highlightedColor="@android:color/holo_orange_dark" app:bmb_buttonEnum="simpleCircle" app:bmb_piecePlaceEnum="piecePlace_dot_9_1" app:bmb_buttonPlaceEnum="buttonPlace_sc_9_1" app:bmb_boomInWholeScreen="false" app:bmb_inFragment="true"
And set this attribute by code above function addBuilder(...).
bmb.setButtonEnum(ButtonEnum.Ham); bmb.setPiecePlaceEnum(PiecePlaceEnum.HAM_6); bmb.setButtonPlaceEnum(ButtonPlaceEnum.HAM_6);
I don't know why? But if I put atrribute of BoomMenu to xml, I will get error:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
I try to debug in BoomMenuButton class. I see function createPieces() run before function addBuilder(...). So when it get item from list boomButtonBuilders while it is null. if I add attribute by code before function addBuilder(...), it is not error.
I hope this can help you. :)
Yes,it is a solution.