szaske
szaske

Reputation: 2027

How to check IS against multiple types

Is there a better way to write this code? Seems like Kotlin should be able to get me a cleaner version, but I cannot figure it out.

    override fun onAttachFragment(fragment: Fragment?) {
        super.onAttachFragment(fragment)

        if (fragment is Step1Fragment) {
            fragment.assignActivity(this)
            return
        }
        if (fragment is Step2Fragment) {
            fragment.assignActivity(this)
            return
        }
        if (fragment is Step3Fragment) {
            fragment.assignActivity(this)
            return
        }
        if (fragment is Step4Fragment) {
            fragment.assignActivity(this)
            return
        }
    }

Upvotes: 4

Views: 539

Answers (1)

Leo Aso
Leo Aso

Reputation: 12463

Step 1: Create an interface.

interface ActivityAssignable {
    fun assignActivity(activity: Activity)
}

Step 2: Make your fragments implement that interface.

class Step1Fragment: Fragment(), ActivityAssignable {
    override fun assignActivity(activity: Activity) { ... }
}

class Step2Fragment: Fragment(), ActivityAssignable {
    override fun assignActivity(activity: Activity) { ... }
}

Step 3: Use that interface in your if statement

if (fragment is ActivityAssignable) {
    fragment.assignActivity(this)
}

Step 4: PROFIT!

Upvotes: 1

Related Questions