2017-09-19 2 views
0

RecyclerView를 사용하여 Image 및 TextView를 원시 항목으로 포함하는 데이터를 표시했습니다.recyclerview 어댑터에서 이미지가 변경되었습니다.

내 어댑터 클래스는 다음과 같습니다 :

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.RecyclerViewHolders> { 

private List<MyModel> itemList; 
private Context context; 

private DisplayImageOptions displayImageOptions; 

public MyAdapter(Activity context, List<MyModel> itemList) { 
    this.itemList = itemList; 
    this.context = context; 
} 

@Override 
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) { 
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.singleview_grid_location, null); 
    RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView); 
    return rcv; 
} 

@Override 
public void onBindViewHolder(final RecyclerViewHolders holder, final int position) { 
    holder.rl_main.setTag(position); 
    final MyModel mainModel = itemList.get((int) holder.rl_main.getTag()); 
    if (mainModel.is_selected()) { 
     holder.rl_main.setBackgroundResource(R.drawable.border_theme); 
     holder.iv_selection.setVisibility(View.VISIBLE); 
    } else { 
     holder.rl_main.setBackgroundColor(Color.parseColor("#FFFFFF")); 
     holder.iv_selection.setVisibility(View.GONE); 
    } 

    holder.txt_location_name.setText(mainModel.getLocationName()); 
    if (mainModel.getImagePath() != null && !mainModel.getImagePath().equals("")) { 
     Constant.getImageLoader().displayImage(mainModel.getImagePath(), 
       holder.iv_location_photo, Constant.getInstanceImageOptions(R.mipmap.popup_placeholder), new SimpleImageLoadingListener() { 
        @Override 
        public void onLoadingStarted(String imageUri, View view2) { 
        } 

        @Override 
        public void onLoadingFailed(String imageUri, View view2, FailReason failReason) { 
         holder.iv_location_photo.setImageResource(R.mipmap.popup_placeholder); 
        } 

        @Override 
        public void onLoadingComplete(String imageUri, View view2, Bitmap loadedImage) { 
        } 
       }); 
    } 
    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (mainModel.is_selected()) { 
       mainModel.setIs_selected(false); 
      } else { 
       mainModel.setIs_selected(true); 
      } 
      itemList.set(position, mainModel); 
      notifyDataSetChanged(); 
     } 
    }); 
} 

@Override 
public int getItemCount() { 
    return this.itemList.size(); 
} 

public class RecyclerViewHolders extends RecyclerView.ViewHolder { 
    public TextView txt_location_name; 
    public ImageView iv_location_photo; 
    public CardView card_view; 
    public ImageView iv_selection; 
    public RelativeLayout rl_main; 

    public RecyclerViewHolders(View itemView) { 
     super(itemView); 
     txt_location_name = (TextView) itemView.findViewById(R.id.txt_location_name); 
     iv_location_photo = (ImageView) itemView.findViewById(R.id.iv_location_photo); 
     card_view = (CardView) itemView.findViewById(R.id.card_view); 
     iv_selection = (ImageView) itemView.findViewById(R.id.iv_selection); 
     rl_main = (RelativeLayout) itemView.findViewById(R.id.rl_main); 
    } 
} 
} 

문제는 내가 Recyclerview의보기를 클릭하고 때, 이미지가 변경있어 점이다. 예, 텍스트 뷰와 제 선택은 동일하고 정확합니다. 문제는보기를 위해 이미지가 변경되었습니다.

무슨 문제 일 수 있습니까? 제발, 체크 아웃. 감사.

+0

onLoadingComplete 이미지가 변경되지 않으십니까? – Anonymous

+0

오류가있는 경우를 제외하고 어디에도 이미지를 설정하지 않습니다. – nomag

+0

@nomag 범용 이미지 로더 및 이미지 사용이 성공적으로 설정되었습니다. 원시 상품을 클릭하면 이미지가 변경됩니다. –

답변

0

이 작업을 수행하는 시점은 무엇입니까 ??

holder.rl_main.setTag(position); 
final MyModel mainModel = itemList.get((int) holder.rl_main.getTag()); 

onBindView에서 제공하는 position 매개 변수 자체에서 List 위치를 가져와야합니다. 다음 클래스에 onClickListener를 작성하고 onBindView.Bad 연습을 구현하지 말고 몇 가지 문제를 만들 수 있습니다. 재정의 메서드. "getItemViewType (int position)" 모델을 수정 한 후. getAdapterPosition에서 얻을 수있는 필요와 제공 위치에 따라 추가/제거/변경/삽입 알림 항목을해야합니다.

+0

@kartik getTag() n setTag()에 대해 모르시겠습니까? –

+0

나는 알고있다. 그러나 그것을 사용하는 점은 없다. 우리는 그것들을 listviews에서 사용했습니다. –

+0

내가 recyclerview를 스크롤 할 때 위치가 바뀌어 .. .. –

관련 문제