RobertApikyan / SegmentedControl

Android SegmentedControl + multi row support
Apache License 2.0
162 stars 30 forks source link

Using segmented Control with Kotlin crashes #3

Closed alaa7731 closed 6 years ago

alaa7731 commented 6 years ago

when implementing setOnSegmentSelectRequestListener in Kotlin it cause a crash

segmentedControl.setOnSegmentSelectRequestListener {
                if (it.sectionPosition == 0) {
                } else {
                }
                true
            }

Crash:


Process: com.tecme.ptasheel.customer, PID: 32678
                                                                             java.lang.ClassCastException: com.tecme.ptasheel.customer.fragments.services.NewServiceCatalogueFragment$onViewCreated$1 cannot be cast to segmented_control.widget.custom.android.com.segmentedcontrol.listeners.OnSegmentSelectRequestListener
                                                                                 at com.tecme.ptasheel.customer.fragments.services.NewServiceCatalogueFragment.onViewCreated(NewServiceCatalogueFragment.kt:43)
                                                                                 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1432)
                                                                                 at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1752)
                                                                                 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1821)
                                                                                 at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
                                                                                 at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2595)
                                                                                 at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2382)
                                                                                 at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2337)
                                                                                 at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2244)
                                                                                 at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:702)
                                                                                 at android.os.Handler.handleCallback(Handler.java:751)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                 at android.os.Looper.loop(Looper.java:154)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6682)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
RobertApikyan commented 6 years ago

Hi, here is a working example, here I set the items data from XML , important point is this findViewById< SegmentedControl<String> >(R.id.segmented_control) from XML I set the data array of strings, after inside my findviewbyId I set the generic type SegmentedControl<String>,

If this will not help , please provide more details, such as your Activity class and layout xml. Have a nice day

/// kotlin class class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val segmentedControl = findViewById<SegmentedControl<String>>(R.id.segmented_control)

    segmentedControl.setOnSegmentSelectRequestListener {
        // do not perform select for first item
        return@setOnSegmentSelectRequestListener  it.absolutePosition != 0
    }

}

} /// layout XML <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="example.com.segmentedcontrollsupport.MainActivity">

<segmented_control.widget.custom.android.com.segmentedcontrol.SegmentedControl
    android:id="@+id/segmented_control"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="8dp"
    app:columnCount="3"
    app:distributeEvenly="true"
    app:textVerticalPadding="6dp"
    app:radius="12dp"
    app:segments="@array/your_array_data" />

</android.support.constraint.ConstraintLayout>

alaa7731 commented 6 years ago

working great Thank you