BoomMenu icon indicating copy to clipboard operation
BoomMenu copied to clipboard

Limited Pieces&Button and set onclick listener

Open venkateshj99 opened this issue 7 years ago • 13 comments

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.

venkateshj99 avatar May 31 '17 06:05 venkateshj99

Click event wiki will tell you.

Nightonke avatar May 31 '17 06:05 Nightonke

Thank you very much Bro. I got It !:)

venkateshj99 avatar May 31 '17 08:05 venkateshj99

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?

venkateshj99 avatar Jun 03 '17 12:06 venkateshj99

This is quite a strange crash... Could you please provide the xml code and the total log of the crash? Thank you.

Nightonke avatar Jun 03 '17 12:06 Nightonke

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

venkateshj99 avatar Jun 03 '17 12:06 venkateshj99

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.

Nightonke avatar Jun 03 '17 13:06 Nightonke

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

venkateshj99 avatar Jun 03 '17 13:06 venkateshj99

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).

venkateshj99 avatar Jun 07 '17 14:06 venkateshj99

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.(HamButton.java:28) at sked.boommenu.BoomButtons.HamButton.(HamButton.java:22) at sked.boommenu.BoomButtons.HamButton$Builder.build(HamButton.java:555) at sked.boommenu.BoomButtons.HamButton$Builder.build(HamButton.java:119) at sked.boommenu.BoomMenuButton.createButtons(BoomMenuButton.java:843) at sked.boommenu.BoomMenuButton.innerBoom(BoomMenuButton.java:553) at sked.boommenu.BoomMenuButton.boom(BoomMenuButton.java:538) at sked.boommenu.BoomMenuButton$1.onClick(BoomMenuButton.java:310) at android.view.View.performClick(View.java:4776) at android.view.View$PerformClick.run(View.java:19793) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5289) 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(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

venkateshj99 avatar Jun 12 '17 10:06 venkateshj99

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.

Nightonke avatar Jun 12 '17 11:06 Nightonke

Yes tried uninstall/reinstall but still throwing the classcastexcception error..

venkateshj99 avatar Jun 12 '17 13:06 venkateshj99

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. :)

congdanh1608 avatar Jul 06 '17 06:07 congdanh1608

Yes,it is a solution.

8bun avatar Mar 03 '19 15:03 8bun