Android数据绑定添加小部件作为绑定适配器的参数

Android数据绑定添加小部件作为绑定适配器的参数,第1张

概述我想运行可见的进度条,直到图像加载到imageview中.我想通过绑定适配器实现它.我有一个具有imageUrl的bindingadpter的CustomBinder类.这是我的自定义活页夹publicclassCustomBinders{staticImageLoaderimageLoader;publicstaticDisplayImageOptionsoptions;

我想运行可见的进度条,直到图像加载到imagevIEw中.我想通过绑定适配器实现它.我有一个具有imageUrl的bindingadpter的CustomBinder类.这是我的自定义活页夹

public class CustomBinders {    static ImageLoader imageLoader;    public static displayImageOptions options;    private static final String TAG = "CustomBinders";    @BindingAdapter({"imageUrl"})    public static voID loadImage(ImageVIEw vIEw, String imageUrl){        imageLoader= ImageLoader.getInstance();        options = Staticmethods.setUIL();        Log.d(TAG, "loadImage: ");        imageLoader.displayImage(imageUrl, vIEw, options, new SimpleImageLoadingListener() {            @OverrIDe            public voID onl oadingStarted(String imageUri, VIEw vIEw) {            }            @OverrIDe            public voID onl oadingFailed(String imageUri, VIEw vIEw, FailReason failReason) {                String message = null;                switch (failReason.getType()) {                    case IO_ERROR:                        message = "input/Output error";                        break;                    case DECoding_ERROR:                        message = "Image can't be decoded";                        break;                    case NETWORK_DENIED:                        message = "Downloads are denIEd";                        break;                    case OUT_OF_MEMORY:                        message = "Out Of Memory error";                        break;                    case UNKNowN:                        message = "UnkNown error";                        break;                }                vIEw.setBackgroundResource(R.drawable.blank);            }            @OverrIDe            public voID onl oadingComplete(String imageUri, VIEw vIEw, Bitmap loadedImage) {            }        });    }}

在我的xml中,它们是一个进度条,我想看到该进度条,直到图像加载完成.那是我的数据绑定XML.

<?xml version="1.0" enCoding="utf-8"?><layout xmlns:androID="http://schemas.androID.com/apk/res/androID"        xmlns:app="http://schemas.androID.com/apk/res-auto"    >    <data >        <variable            name="artList"            type="com.twebexponent.artwork.data.ArtListCreatedBy"/>    </data>    <FrameLayout        androID:ID="@+ID/myContainer"        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:visibility="visible"        androID:background="@drawable/manageartwork_border">        <Progressbar            androID:ID="@+ID/progressbar"                        androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:layout_centerHorizontal="true"            androID:layout_centerVertical="true"            androID:layout_gravity="center"            androID:layout_marginBottom="20dp"            androID:layout_margintop="20dp"            androID:visibility="gone" />        <ImageVIEw            androID:ID="@+ID/art_img"            androID:layout_wIDth="match_parent"            androID:layout_height="100dp"            androID:scaleType="centerCrop"            androID:adjustVIEwBounds="true"            app:imageUrl="@{artList.image}"            />    </FrameLayout></layout>

这是在我只是简单地使用绑定而不是通过调用BindingAdapter调用视图之前.

vIEwDataBinding.progressbar.setVisibility(VIEw.VISIBLE);        imageLoader.displayImage(artListModel.getimage(), vIEwDataBinding.artimg, options, new SimpleImageLoadingListener() {            @OverrIDe            public voID onl oadingStarted(String imageUri, VIEw vIEw) {            }            @OverrIDe            public voID onl oadingFailed(String imageUri, VIEw vIEw, FailReason failReason) {                String message = null;                switch (failReason.getType()) {                    case IO_ERROR:                        message = "input/Output error";                        break;                    case DECoding_ERROR:                        message = "Image can't be decoded";                        break;                    case NETWORK_DENIED:                        message = "Downloads are denIEd";                        break;                    case OUT_OF_MEMORY:                        message = "Out Of Memory error";                        break;                    case UNKNowN:                        message = "UnkNown error";                        break;                }                vIEwDataBinding.progressbar.setVisibility(VIEw.GONE);                vIEwDataBinding.artimg.setBackgroundResource(R.drawable.blank);            }            @OverrIDe            public voID onl oadingComplete(String imageUri, VIEw vIEw, Bitmap loadedImage) {                vIEwDataBinding.progressbar.setVisibility(VIEw.GONE);            }        });

现在在上面的代码中,我第一次可以看到进度条,然后当图像加载完成时,我只是进入了进度条.现在,相同的方法将如何使用@BindingAdapter({“ imageUrl”})做到这一点?

这是我的适配器看起来像recylervIEw-

public class ArtistCreatedByAdapter extends RecyclerVIEw.Adapter<ArtistCreatedByAdapter.CustomVIEwHolder> {    ArrayList<ArtListCreatedBy> createdByArtList;    Activity activity;    LayoutInflater inflater;    ImageLoader imageLoader;    public displayImageOptions options;    ArtListCreatedByBind vIEwDataBinding;    public class CustomVIEwHolder extends RecyclerVIEw.VIEwHolder {        private ArtListCreatedByBind mVIEwDataBinding;        public CustomVIEwHolder( VIEw v) {            super(v);            mVIEwDataBinding = DataBindingUtil.bind(v);            mVIEwDataBinding.executePendingBindings();        }        public ArtListCreatedByBind getVIEwDataBinding() {            return mVIEwDataBinding;        }    }    public ArtistCreatedByAdapter(Activity activity, ArrayList<ArtListCreatedBy> createdByArtList) {        this.activity = activity;        imageLoader= ImageLoader.getInstance();        this.createdByArtList = createdByArtList;    }    @OverrIDe    public CustomVIEwHolder onCreateVIEwHolder(VIEwGroup parent, int vIEwType) {        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        VIEw itemVIEw = inflater.inflate(R.layout.singlerow_art_List_created_by, parent, false);        return new CustomVIEwHolder(itemVIEw);    }    @OverrIDe    public voID onBindVIEwHolder(CustomVIEwHolder holder, final int position) {        ArtListCreatedBy artListModel= createdByArtList.get(position);        vIEwDataBinding = holder.getVIEwDataBinding();        vIEwDataBinding.setArtList(artListModel);    }    @OverrIDe    public int getItemCount() {        return createdByArtList.size();    }}

解决方法:

将另一个参数与您的BindingAdapter方法绑定

@BindingAdapter({"imageUrl","progressbar"})public static voID loadImage(ImageVIEw vIEw, String imageUrl, Progressbar progressbar){    ...    ...    @OverrIDe    public voID onl oadingComplete(String imageUri, VIEw vIEw, Bitmap loadedImage) {        progressbar.setVisibility(VIEw.GONE);    }}

现在从xml这样传递您的progressbar:

<ImageVIEw        androID:ID="@+ID/art_img"        androID:layout_wIDth="match_parent"        androID:layout_height="100dp"        androID:scaleType="centerCrop"        androID:adjustVIEwBounds="true"        app:imageUrl="@{artList.image}"        app:progressbar="@{progressbar}"/>

注意:这里progressbar将是您的Progressbar的ID

总结

以上是内存溢出为你收集整理的Android数据绑定添加小部件作为绑定适配器的参数全部内容,希望文章能够帮你解决Android数据绑定添加小部件作为绑定适配器的参数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1090849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存