大佬教程收集整理的这篇文章主要介绍了android – RecyclerView消失的图像,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
<LinearLayout xmlns:android="http://scheR_718_11845@as.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="160dp"> <ImageView android:id="@+id/product_variation_image" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:layout_gravity="center"/>
这是Adaper:
public class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> { private String[] mDataset; public static class ViewHolder extends RecyclerView.ViewHolder { public ImageView mImageView; public ViewHolder(View v) { super(v); mImageView = (ImageView) v.findViewById(R.id.product_variation_imagE); } } public TestAdapter(String[] myDataset) { mDataset = myDataset; } @Override public TestAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewTypE) { // create a new view View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.variaton_list_item,parent,falsE); ViewHolder vh = new ViewHolder(v); return vh; } @Override public void onBindViewHolder(ViewHolder holder,int position) { holder.mImageView.setImageDrawable(null); String url = mDataset[position]; Log.i("TEST","position = " + position); ((MainActivity)MainActivity.geTinstance()).imageDownloader.download(url,holder.mImageView); } @Override public int getItemCount() { return mDataset.length; }
下载方法从URL获取图像,或者如果已经缓存,则从内存中获取图像.这适用于所有其他布局,例如ListView或GridView.这是我在片段中设置它的代码:
final linearlayoutmanager layoutManager = new linearlayoutmanager(getActivity()); layoutManager.setOrientation(linearlayoutmanager.HORIZONTAL); mRecyclerView.setLayoutManager(layoutManager);
这是在onCreateView方法中.当我获取网址时,我填充它们并使用以下方法设置适配器:
@H_28_2@myDataset[i] = imageURL; // for each image mAdapter = new TestAdapter(myDataset); mRecyclerView.setAdapter(mAdapter);有趣的是适配器中onBindViewHolder方法中的行,我记录位置.我发现没有显示图像的单元格是没有调用此方法.就像它出于某种原因跳过那个细胞一样.更奇怪的是,如果我按住一个单元格并继续从左向右滑动,如果一个单元格离开屏幕然后又重新进入,那么它的图像就会再次被调用onBindViewHolder方法.
public class RecyclingImageView extends ImageView { public RecyclingImageView(Context context) { super(context); } public RecyclingImageView(Context context,AttributeSet attrs) { super(context,attrs); } /** * @see android.widget.ImageView#onAttachedToWindow() */ @Override protected void onAttachedToWindow() {} /** * @see android.widget.ImageView#onDetachedFromWindow() */ @Override protected void onDetachedFromWindow() { // This has been detached from Window,so clear the drawable setImageDrawable(null); super.onDetachedFromWindow(); } /** * @see android.widget.ImageView#setImageDrawable(android.graphics.drawable.DrawablE) */ @Override public void setImageDrawable(Drawable drawablE) { // Keep hold of prevIoUs Drawable final Drawable prevIoUsDrawable = getDrawable(); // Call super to set new Drawable super.setImageDrawable(drawablE); // Notify new Drawable that it is being displayed notifyDrawable(drawable,truE); // Notify old Drawable so it is no longer being displayed notifyDrawable(prevIoUsDrawable,falsE); } /** * Notifies the drawable that it's displayed state has changed. * * @param drawable * @param isDisplayed */ private static void notifyDrawable(Drawable drawable,final Boolean isDisplayed) { if (drawable instanceof RecyclingBitmapDrawablE) { // The drawable is a CounTingBitmapDrawable,so notify it ((RecyclingBitmapDrawablE) drawablE).setIsDisplayed(isDisplayed); } else if (drawable instanceof LayerDrawablE) { // The drawable is a LayerDrawable,so recurse on each layer LayerDrawable layerDrawable = (LayerDrawablE) drawable; for (int i = 0,z = layerDrawable.getnumberOfLayers(); i < z; i++) { notifyDrawable(layerDrawable.getDrawable(i),isDisplayed); } } } }
当我用普通的ImageView替换它时,我不再遇到问题.
以上是大佬教程为你收集整理的android – RecyclerView消失的图像全部内容,希望文章能够帮你解决android – RecyclerView消失的图像所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。