2016-06-28 39 views
0

我有一些问题,当我重装recyclerView(读取数据)都与新的数据同步,而不是图片是内部ViewPagerRecyclerView不同步的新加载的图像

onBindViewHolder

@Override 
public void onBindViewHolderImpl(final RecyclerView.ViewHolder viewHolder, ParallaxRecyclerAdapter<Information> adapter, final int i) { 

    final Information current = finalContent.get(i); 


    ((ViewHolder) viewHolder).DESCRIPTION.setText(current.description); 
    ((ViewHolder) viewHolder).IMAGEEXISTENCE.setText(current.imageExistence.toString()); 

    Log.d("TAG1","IMAGEEXISTENCE : "+((ViewHolder) viewHolder).IMAGEEXISTENCE.getText() +" position : "+i+" link : "+current.FileUrl); 

    //checking if image exists if yes then set the pager size else set it to 0 

    if (((ViewHolder) viewHolder).IMAGEEXISTENCE.getText().toString().matches("true")) { 

    //its a string of url's combined with "|" 

     String[] imgUrlArray = ((current.FileUrl.split("\\| "))); 
     arrayLists.add(imgUrlArray); 

     ViewPager mViewPager = ((ViewHolder) viewHolder).viewPager; 
     mViewPager.getLayoutParams().height = 550; 
     mViewPager.requestLayout(); 


     String[] mResources = {}; 
     // here am passing the image url to AdapterClass 
     mResources = arrayLists.get(i); 
     CarouselAdapter mCustomPagerAdapter = new CarouselAdapter(getContext(), mResources , i); 
     // here am setting the pagerAdapter for my Pager 
     mViewPager.setAdapter(mCustomPagerAdapter); 

    } else { 
      if image is not exist then am passing a blank url 
     String[] imgUrlArray = new String[0]; 
     arrayLists.add(imgUrlArray); 
    } 
} 

适配器类别

public class CarouselAdapter extends PagerAdapter { 

    private Context mContext; 
    private LayoutInflater mLayoutInflater; 
    private String[] mResources; 
    private int mindex; 

    public CarouselAdapter(Context context, String[] resources, int index) { 
     mContext = context; 
     mResources = resources; 
     mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     mindex = index; 

    } 

    @Override 
    public int getCount() { 
     return mResources.length; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return view == ((RelativeLayout) object); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     View itemView = mLayoutInflater.inflate(R.layout.carousel_imgview, container, false); 

     ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView); 
     // imageView.setImageResource(mResources[position] 
     //); 

     if (mResources[position] == null){ 

      imageView.setImageDrawable(null); 
//   imageView.getLayoutParams().height = 0; 
//   imageView.requestLayout(); 

     }else { 

     final DonutProgress donutProgress = (DonutProgress) itemView.findViewById(R.id.donut_progress); 

      donutProgress.setTextColor(Color.argb(0,0,0,0)); 

      donutProgress.setUnfinishedStrokeColor(Color.LTGRAY); 
      donutProgress.setFinishedStrokeColor(Color.GRAY); 

      donutProgress.setVisibility(View.VISIBLE); 


      ImageLoader imageLoader = ImageLoader.getInstance(); 


      String newUrl = mResources[position].replaceAll(" ", ""); 

      // for clearing cache 
      DiskCacheUtils.removeFromCache(newUrl, ImageLoader.getInstance().getDiskCache()); 



      DisplayImageOptions options = new DisplayImageOptions.Builder().cacheOnDisk(true).build(); 

      imageLoader.displayImage(newUrl, imageView , options , new ImageLoadingListener() { 

       @Override 
       public void onLoadingStarted(String imageUri, View view) { 

        donutProgress.setVisibility(View.VISIBLE); 

       } 

       @Override 
       public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 

        donutProgress.setVisibility(View.GONE); 
       } 

       @Override 
       public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 

        donutProgress.setVisibility(View.GONE); 
       } 

       @Override 
       public void onLoadingCancelled(String imageUri, View view) { 

        Log.d("TAG","onLoadingCancelled"); 
       } 
      }, new ImageLoadingProgressListener() { 
       @Override 
       public void onProgressUpdate(String imageUri, View view, int current, int total) { 

        donutProgress.setMax(total); 
        donutProgress.setProgress(current); 

       } 
      }); 



     } 

     container.addView(itemView); 

     return itemView; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((RelativeLayout) object); 
    } 

} 

即时签通过打印网址和图像存在(布尔)这是完全正确的只是不知道为什么我的recyclerView不同步新的图像

而不是图像索引正在改变(在重新加载数据image2在索引2 )重新加载数据后(如果数据是新的),然后所有我的图像的索引得到改变,如果重新加载image2之后在索引2重新加载后,image2移动到索引1它与所有图像我没有任何线索发生这是为什么如果发生有人知道那么请你指导我如何解决这一问题

回答

0

尝试

viewHolder.setIsRecyclable(false); 

onBindViewHolderImpl(); 
+0

是不是会造成问题?因为意见不可回收,所以意味着更多的工作效率降低。纠正我,如果我错了 –

+0

甚至尝试你的解决方案没有做任何改变 –

+0

它效率较低,但由于有如果在bindViewHolder(),如果还有其他,我认为这可能是导致问题。我想这是在你正在更新“信息”类的数据的类中。你怎么更新数据并调用'notifyDataSetChanged()'? –