簡體   English   中英

Android - 綁定適配器不起作用

[英]Android - Binding adapter not working

我創建了一個綁定適配器來用畢加索顯示圖片,但它不起作用。 我有以下錯誤:

發現數據綁定錯誤。 ****/ 數據綁定錯誤 ****msg:在 android.widget.ImageView 上找不到參數類型為 java.lang.String 的屬性“app:loadPicture”的設置器。 文件:/home/groupevsc.com/mathieu_labar/Documents/Projects/android-jetpack/app/src/main/res/layout/activity_detail_movie.xml loc:27:31 - 27:52 ****\\數據綁定錯誤* ***

這是我的綁定適配器:

object CommonBindingUtil {

    @JvmStatic
    @BindingAdapter("loadPicture")
    fun loadPicture(view: ImageView, text: String) {
        Picasso.with(view.context)
                .load(text)
                .error(R.drawable.ic_movie_24)
                .fit()
                .placeholder(R.drawable.ic_movie_24)
                .into(view)
    }

}

我的 XML 具有屬性 "app:loadPicture" :

<ImageView
    android:id="@+id/picture"
    android:layout_width="@dimen/material_image_simple_width"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"
    android:src="@drawable/ic_movie_24"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:loadPicture="@{viewModel.movie.Poster}"/>

這是我的 GitHub 存儲庫: https : //github.com/mlabar/android-jetpack/tree/tech_ajout_databinding

有人會想辦法解決我的問題嗎?

謝謝!

謝謝@Blackbelt 解決了我的問題,我在所有build.gradle模塊中添加了“kotlin-kapt”:

apply plugin: 'kotlin-kapt'

這是我的代碼

@JvmStatic
    @BindingAdapter({"bind:loadPicture"})
    fun loadPicture(view: ImageView, loadPicture: String) {
        Picasso.with(view.context)
                .load(loadPicture)
                .error(R.drawable.ic_movie_24)
                .fit()
                .placeholder(R.drawable.ic_movie_24)
                .into(view)
    }

有關更多詳細信息,請參閱我在GitHub 上的項目

像這樣改變你的MovieViewModel類:

class MovieViewModel(private val movie: Movie) : Observer, BaseObservable() {

    init {
       Movie.addObserver(this)
    }
    val Poster: String
        @Bindable get() {
            return Poster.name
        }
}

像這樣的電影類:

class Movie: Observable() {
    var Title: String = ""
        set(value) {
            field = value
            setChangedAndNotify("Title")
        }
    var Year: String = ""
        set(value) {
            field = value
            setChangedAndNotify("Year")
        }
    var imdbID: String = ""
        set(value) {
            field = value
            setChangedAndNotify("imdbID")
        }
    var Type: String = ""
        set(value) {
            field = value
            setChangedAndNotify("Type")
        }
    var Poster: String = ""
        set(value) {
            field = value
            setChangedAndNotify("Poster")
        }
    var Plot: String = ""
        set(value) {
            field = value
            setChangedAndNotify("Plot")
        }

    private fun setChangedAndNotify(field: Any) {
        setChanged()
        notifyObservers(field)
    }
}

根據您的需要創建您的類上下文,運行它希望它會解決您的問題。

您沒有為綁定適配器函數傳遞正確的參數。

對象 CommonBindingUtil {

@JvmStatic
@BindingAdapter("loadPicture")
fun loadPicture(view: ImageView, text: String) {
    Picasso.with(view.context)
            .load(text)
            .error(R.drawable.ic_movie_24)
            .fit()
            .placeholder(R.drawable.ic_movie_24)
            .into(view)
}

}

這里loadPicture函數預期參數imageView和一個字符串,但在這里,在你的XML,您將可以通過照片的對象

app:loadPicture="@{viewModel.movie.Poster}

你應該寫這樣的東西app:loadPicture="@{viewModel.movie.Poster.url}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM