我想运行可见的进度条,直到图像加载到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数据绑定添加小部件作为绑定适配器的参数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)