簡體   English   中英

使用自定義綁定適配器綁定可繪制資源

[英]Using custom binding adapter to bind drawable resource

我正在嘗試在視圖模型和UI中的對象的兩個屬性之間建立數據綁定。

該對象具有兩個屬性nameiconName ,我可以通過視圖模型中的Getter- / Setter-Methods訪問。

name屬性是一個簡單的String字段,綁定到EditText組件。

但是, iconName屬性是位於drawable目錄中的XML文件的資源名稱 ,應該將其綁定為ImageView組件的源。

手動更改ImageView組件的來源就像調用一樣容易:

int resId = getResources().getIdentifier(iconName, "drawable", getPackageName());
selectedIconView.setImageResource(resId);

在Activity類中。

但是現在我不確定如何在綁定適配器內提取資源ID以更新ImageView,因為我的綁定適配器內似乎沒有上下文。

public class SubjectAdapter {
    @BindingAdapter("app:subjectName")
    public static void setSubjectName(EditText view, SubjectEntity subject) {
        view.setText(subject.getName());
    }

    @BindingAdapter("app:srcCompat")
    public static void setSubjectIcon(ImageView view, SubjectEntity subject) {
        String iconName = subject.getIconName();
        // TODO: Set Image Resource of view
    }
}

如果您有任何View ,則獲取Context就像在視圖上調用getContext()一樣容易。

@BindingAdapter("app:srcCompat")
public static void setSubjectIcon(ImageView view, SubjectEntity subject) {
    String iconName = subject.getIconName();
    Context context = view.getContext();
    String packageName = context.getPackageName();
    int resId = context.getResources().getIdentifier(iconName, "drawable", packageName);
    view.setImageResource(resId);
}

讓您的適配器功能接收該值(資源ID):

class MyViewModel : ViewModel() {

    companion object {
        @BindingAdapter("app:srcCompat")
        @JvmStatic
        fun setImageViewResource(imageView: ImageView, resource: Int) {
            imageView.setImageResource(resource)
        }
    }
}

該代碼從生成的類中調用,因此不必一定要在您的viewmodel中。

暫無
暫無

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

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