Использование «когда» в Kotlin соответствует другому значению - PullRequest
0 голосов
/ 30 апреля 2020

Я работаю над Android Studio с Kotlin.

Мое приложение имеет 3 кнопки (скажем, кнопки A, B, C) в Activity и работает нормально.

Однако, когда я отлаживаю приложение, оцененное значение по ключевому слову «когда» совпадает с другим значением.

Это код.

fun setOnClickListener(button: Button) {
    button.setOnClickListener {
        val fragment =
            when(button.id) {
                R.id.aButton -> AFragment()
                R.id.bButton -> BFragment()
                R.id.cButton -> CFragment()
                else -> throw Exception()
            }
    }

Когда я нажимаю кнопку B, button.id совпадает с R.id.bButton.

Это то, что я намеревался сделать, но я запутался, когда увидел значение button.Id и R.id.bButton, поскольку button.Id - это 2131165292, а R.id.bButton - -1000025.

Не могли бы вы описать, почему эти два различных значения оцениваются одинаково?

[Дополнительно Информация]

Я проверяю значение, просто наведя курсор на button.Id и R.id.bButton, как показано ниже.

enter image description here

enter image description here

 public boolean performClick() {
        final boolean result;
        final ListenerInfo li = mListenerInfo;
        if (li != null && li.mOnClickListener != null) {
            playSoundEffect(SoundEffectConstants.CLICK);
            li.mOnClickListener.onClick(this);
            result = true;
        } else {
            result = false;
        }

        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
        return result;
    }

Это трассировка мешка, на которой отладчик остановлен when(button.id).

onClick:22, SubActivity$setOnClickListener$1 (Package name of my app)

performClick:5637, View (android.view)

run:22429, View$PerformClick (android.view)

handleCallback:751, Handler (android.os)

dispatchMessage:95, Handler (android.os)

loop:154, Looper (android.os)

main:6119, ActivityThread (android.app)

main:776, ZygoteInit (com.android.internal.os)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...