Howto androidx-databinding для onClick к статическому методу с параметром - PullRequest
1 голос
/ 10 мая 2019

(Примечание: это дополнительный вопрос к Можно ли использовать androidx-навигацию с привязкой данных onClick без записи кода в Fragment?

Я хочу использовать привязку данных androidxдля обработки onClick вызова статического метода с параметрами Utils.myNavigate(...) через xml-layout-file

Мой код ниже проверяется процессом компиляции , но никогда не вызывается, когда я нажимаю на кнопку.

Как это исправить?

Мой Файл макета:

<layout ...>
<data>
    <import type="de.k3b.androidx.navigationdemo.R" />
    <import type="de.k3b.androidx.navigationdemo.Utils" />
</data>

<RelativeLayout ...>

    <Button ...
        android:onClick="@{view -> Utils.myNavigate(view,
                                R.id.action_gallery_to_editProperties)}"
         />

</RelativeLayout>
</layout>

Мой Реализация статического метода:

public class Utils {

public static final String TAG = "Utils";

public static void myNavigate(View view, @IdRes int id) {
    // this gets never called neither with `Object view` nor with `View view`
    Log.d (TAG, "myNavigate clicked");
    //  Navigation.findNavController(view).navigate(id);
}

}

глобальный проект build.gradle

buildscript {
repositories {
    google()
    jcenter()

}
dependencies {
    classpath 'com.android.tools.build:gradle:3.4.0'
    classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}

allprojects {
repositories {
    google()
    jcenter()

}
}

приложение build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "de.k3b.androidx.navigationdemo"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding.enabled=true

}

dependencies {
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'android.arch.navigation:navigation-fragment:1.0.0'
    implementation 'android.arch.navigation:navigation-ui:1.0.0'
}

1 Ответ

1 голос
/ 10 мая 2019

Возможно, вы забыли связать макет с действием.

Изменение

setContentView(R.layout.your_layout_file);

К

DataBindingUtil.setContentView(this, R.layout.your_layout_file);

Если это не проблема, вы можете проверить рабочий образец , который я создал при вызове статического метода с использованием привязки данных.

...