마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리사이클러뷰에서 ImageView에 사진 없는 경우 체크하기

0 추천
리사이클러뷰 xml에 ImageView를 넣고, 이 ImageView에는 갤러리에서 불러온 사진이 들어가게끔 했습니다. (Glide 사용)

갤러리에서 사진을 안 불러왔을 때는 ImageView에 사진없이 빈화면으로 레이아웃만이 남아있는데,

이럴 경우(사진이 없는 경우)에는 View.visibility = GONE을 써서 레이아웃도 안 남게끔 하고 싶습니다.

그런데 사진이 없는 경우를 어떻게 판별해야 하는지 모르겠네요ㅠㅠ
끝내자 (140 포인트) 님이 2022년 3월 29일 질문

2개의 답변

0 추천

데이터 중심으로 리사이클러뷰를 보여주세요.

리사이클러뷰에 들어갈 데이터 구조를 정의하시고 이걸 가지고 리사이클러뷰에 표시하면 어떤 아이템에 이미지가 없는지 아실 수 있을 것니다.

예를 들어,

public class ListItem {
    private final imageUrl: String;
   // 생성자, getter, 등 생략

   public boolean getImageVisibility() {
        return imageUrl == null || imageUrl.isEmpty( ? View.GONE || View.VISIBLE;
   }
}


private List<ListItem> listItems = new ArayList<>();


listitems = getListItems();
recyclerViewAapter.setListItems(listitems);

 

위처럼 List<ListItem>을 adapter 에 보여주시고 ViewHolder에서는 listItem.getImageVisibileity() 를 읽어서 

imageView.setVisibiltiy(listItem.getImageVisibileity());

이런 행태로 처리하시면  되겠죠. getImageVisibileity의 로직은 님이 필요에 맞게 필요하시면 고치시면 되구요.

spark (226,420 포인트) 님이 2022년 3월 29일 답변
0 추천

이미지를 불러왔을 때 배열에 저장하실거잖아요?

그럼 예를 들어서

리스트 선언을

private List<Uri> nList;

그리고 초기화

nList = new ArrayList<>();

만약 이미지 최대 5개까지 선택해서 넣는다면(리사이클러뷰 기준)

mBinding.layoutAddPhoto.setOnClickListener(v ->
        {
            if (nList.size() < 5) {
                TedImagePicker.with(mContext)
                        .max(5 - nList.size(), "(최대5)")
                        .startMultiImage(list -> {
                            showMultiImage(list);
                        });
            } else {
                toast("(최대5)");
            }
        }
);

이렇게 이벤트 주세요 TedImagePicker 쓰면 편합니다 다중이미지 선택시

private void showMultiImage(List<? extends Uri> list) {
    for (int i = 0; i < list.size(); i++) {
        nList.add(list.get(i));
    }
   
    mAdapter.update(nList);
    mBinding.recyclerView.scheduleLayoutAnimation();
    mBinding.tvPhotoCnt.setText(nList.size() + "/5");
}

그리고 안에 있는 showMultiImage 여기서 제어하면 되고

저기서 선택한 사진들은 nList에 담기겠죠.

만약에 이미지를 선택 안했다면 nList.size() ==0 이므로

if(nList.size() == 0) {

    mBinding.img.setVisibility(GONE);

}

이런식으로 처리하면 될거같아요

 

익명사용자 님이 2022년 3월 30일 답변
...