3

私は0,2,5,7のRecycleViewer(GridLayoutManager)位置固定されている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の位置をスキップせず、表示されます (技術的にはカスタム イメージの背後にあります)。

4

3 に答える 3

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かの変更を加えて、リストからnullオブジェクトを取得すると、そのアイテムにこれらの値を設定できます

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);
        }
    }
于 2016-01-22T08:48:39.447 に答える
0

最後の if ステートメントは常に trueです。

位置 0に対して誤ったステートメントがどのように機能するかを次に示します。

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

if position != 0 (false) OR position != 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;
}
于 2016-01-22T08:46:01.413 に答える