跳过GridLayoutManager android中的单元格

时间:2016-01-22 07:20:51

标签: android android-recyclerview gridlayoutmanager

我有RecycleViewer(GridLayoutManager)其中 0,2,5,7 位置已固定Custom images (relativeLayout converted to bitmap)

我想跳过这些 0,2,5,7 职位,因为他们已经Custom images & 我希望填补余下的职位服务器图像

在onBindViewHolder

if (position == 0) {
            ProfilePhotosViewHolder.relativeBucket.setVisibility(View.VISIBLE);
            ProfilePhotosViewHolder.relativeBucket.setDrawingCacheEnabled(true);
            ProfilePhotosViewHolder.relativeBucket.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                    View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
            ProfilePhotosViewHolder.relativeBucket.layout(0, 0, ProfilePhotosViewHolder.relativeBucket.getMeasuredWidth(), ProfilePhotosViewHolder.relativeBucket.getMeasuredHeight());
            ProfilePhotosViewHolder.relativeBucket.buildDrawingCache(true);
            Bitmap b = Bitmap.createBitmap(ProfilePhotosViewHolder.relativeBucket.getDrawingCache());
            ProfilePhotosViewHolder.relativeBucket.setDrawingCacheEnabled(false);
            ProfilePhotosViewHolder.imgProfilePhotos.setImageBitmap(b);
        }
        if (position == 2) {
            ...
        }
        if (position == 5) {
            ...
        }
        if (position == 7) {
            ...
        }

        if (position!=0 || position!= 2 || position!=5 || position!=7){
            ImageLoader imageLoader = AppController.getInstance().getImageLoader();
            ProfilePhotosViewHolder.imgProfilePhotos.setImageUrl(model.Images, imageLoader);
            ProfilePhotosViewHolder.imgProfilePhotos.setDefaultImageResId(R.drawable.im_profile_monuments);
            ProfilePhotosViewHolder.imgProfilePhotos.setErrorImageResId(R.drawable.bt_profile_addphoto);
       }

服务器图片不会跳过 0,2,5,7 位置,它也会显示(技术上落后于我的自定义图像)

3 个答案:

答案 0 :(得分:0)

您最后的if语句始终为真

以下是您的错误陈述如何适用于位置0

if (position!=0 || position!= 2 || position!=5 || position!=7) { 

如果位置!= 0(假)或位置!= 2() - 因为语句是 true 它会执行 - 你不希望它是在这种情况下为true,因为如果position为0或2或5或7,则不想执行。

你需要&&如果您希望图像加载器只发生在0 而不是2 而不是5 而不是7 ...

否则如果你的条件更好的选择。

但如果使用switch语句,您的代码将更简单,更快速,更易于阅读。

switch(position) {
   case 0:
      ...
      break;
   case 2:
      ...
      break;
   case 5:
      ...
      break;
   case 7:
      ...
      break;
   default:
      ...
      break;
}

答案 1 :(得分:0)

我假设你有List引用变量,你从服务器获取的数据填充,而不是设置为Adapter。 (假设您从服务器获得了6个项目。)

所以你的列表中包含以下位置的元素

list[ 0= "data",1= "data",2= "data",3= "data",4= "data",5= "data",6= "data"]

问题是你的适配器填充gidview与你提供的列表相对应,不会跳过元素,

你可以做的是,在制作List时你可以跳过你希望适配器跳过的位置,以这种方式

list.add(0,null);

list.add(1, "add your data from the server for this position");

list.add(2,null);

list.add(3,"add your data from the server for this position");

list.add(4,"add your data from the server for this position");

list.add(5,null);

list.add(6,"add your data from the server for this position");

list.add(7,null);

list.add(8,"add your data from the server for this position");

并在onBindViewHolder进行一些更改,当您从列表中获取空对象时,您可以为该项设置这些值

ProfilePhotosViewHolder.imgProfilePhotos.setImageUrl(model.Images, imageLoader);
ProfilePhotosViewHolder.imgProfilePhotos.setDefaultImageResId(R.drawable.im_profile_monuments);
ProfilePhotosViewHolder.imgProfilePhotos.setErrorImageResId(R.drawable.bt_profile_addphoto);
  

更新

    for (int i = 0; i < mDefaultImages.length; i++) {

        photosModel = new ProfilePhotosModel(); 
        photosModel.Images = mDefaultImages[i];
        if (profilePhotosListData.size() == 0 || profilePhotosListData.size() == 1||profilePhotosListData.size() == 4||profilePhotosListData.size() == 6) {
            profilePhotosListData.add(null);
            profilePhotosListData.add(photosModel);
        }else {
            profilePhotosListData.add(photosModel);
        }
    }

答案 2 :(得分:0)

将代码更改为此:

AttributeError: 'function' object has no attribute 'get_extra_actions'