왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • labelme
  • pip install labelme
  • numpy
  • 영상처리역사
  • TensorFlow
  • labelme UnocodeDecodeError
  • matplotlib
  • alibi-detection
  • 의료이미징
  • maskimage
  • imageprocessing
  • alibidetect
  • ComputerVision
  • PYTHON
  • 영상처리
  • yolov8
  • 기상탐사
  • 딥러닝
  • encoding='utf-8'
  • 컴퓨터비전
  • 영상기술
  • ckpt_file
  • UnboundLocalError
  • 비지도학습
  • PIL
  • get_long_description
  • pytorch
  • unsupervised
  • tune()
  • OpenCV

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

Android Studio

Android - RecyclerView, Fragment의 클릭 이벤트 처리하기

2023. 2. 15. 15:20
728x90

어뎁터 코드

 

처리 과정 주석처리

 

public class PostingAdapter extends RecyclerView.Adapter<PostingAdapter.ViewHolder>  {

    Context context;
    ArrayList<Posting> postingList;

    SimpleDateFormat sf;
    SimpleDateFormat df;

    public interface OnItemClickListener {
        // fragment에서 사용 가능하도록
        // adpater의 특정 행이나 버튼을 누르면 처리할 함수를 만든다.
        void likeProcess(int index);
        void onImageClick(int index);

    }

    public OnItemClickListener listener;
    public void setOnItemClickListener(OnItemClickListener listener){
        this.listener = listener;
    }

    public PostingAdapter(Context context, ArrayList<Posting> postingList) {
        this.context = context;
        this.postingList = postingList;

        // UTC => Local Time
        sf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
        df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sf.setTimeZone(TimeZone.getTimeZone("UTC"));
        df.setTimeZone(TimeZone.getDefault());

    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.posting_row, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Posting posting = postingList.get(position);

        holder.txtContent.setText(posting.getContent());
        holder.txtEmail.setText(posting.getEmail());

        try {
            Date date = sf.parse(posting.getCreatedAt());
            holder.txtCreatedAt.setText(  df.format(date)  );
        } catch (ParseException e) {
            e.printStackTrace();
        }

        if(posting.getIsLike() == 1){
            holder.imgLike.setImageResource(R.drawable.ic_thumb_up_2);
        }else {
            holder.imgLike.setImageResource(R.drawable.ic_thumb_up_1);
        }

        Glide.with(context)
                .load(posting.getImgUrl())
                .placeholder(R.drawable.outline_photo_24)
                .into(holder.imgPhoto);

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder{

        CardView cardView;
        TextView txtContent;
        TextView txtEmail;
        TextView txtCreatedAt;
        ImageView imgLike;
        ImageView imgPhoto;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            cardView = itemView.findViewById(R.id.cardView);
            txtContent = itemView.findViewById(R.id.txtContent);
            txtEmail = itemView.findViewById(R.id.txtEmail);
            txtCreatedAt = itemView.findViewById(R.id.txtCreatedAt);
            imgLike = itemView.findViewById(R.id.imgLike);
            imgPhoto = itemView.findViewById(R.id.imgPhoto);

            imgLike.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    // 1. 어느번째의 데이터의 좋아요를 누른것인지 확인
                    int index = getAdapterPosition();

//                    ((MainActivity)context).likeProcess(index);
//                    ((FirstFragment)((MainActivity)context).firstFragment).likeProcess(index);
                    listener.likeProcess(index);




                }
            });

            imgPhoto.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int index = getAdapterPosition();
                    listener.onImageClick(index);
                }
            });

        }
    }

}

 

 

Fragment

 

 

위에서 만든 인터페이스의 함수를 아래 코드처럼 오버라이딩 해준다!

 

adapter = new PostingAdapter(getActivity(),postingList);
                    adapter.setOnItemClickListener(new PostingAdapter.OnItemClickListener() {
                        @Override
                        public void likeProcess(int index) {

                            FirstFragment.this.likeProcess(index);

                        }

                        @Override
                        public void onImageClick(int index) {
                            Posting posting = postingList.get(index);
                            String imgUrl = posting.getImgUrl();
                            Intent intent = new Intent(getActivity(),PhotoActivity.class);
                            intent.putExtra("imgUrl",imgUrl);
                            startActivity(intent);
                        }
                    });

                    recyclerView.setAdapter(adapter);
                }else{
                    progressBar.setVisibility(View.GONE);
                    return;

'Android Studio' 카테고리의 다른 글

Android - 카카오 로그인 API를 이용해 간편 로그인 기능 구현하기  (0) 2023.04.03
Android - Fragment 탭바를 이용하여 각각의 다른 화면으로 전환하기  (0) 2023.02.15
Android - Retrofit Multipart 사용 방법, 파일 업로드하기  (0) 2023.02.14
Android - 카메라와 사진첩을 이용하여 이미지 뷰에 사진 출력하기  (0) 2023.02.13
Android - 네트워크 통신 Retrofit2 Library  (0) 2023.02.09
    'Android Studio' 카테고리의 다른 글
    • Android - 카카오 로그인 API를 이용해 간편 로그인 기능 구현하기
    • Android - Fragment 탭바를 이용하여 각각의 다른 화면으로 전환하기
    • Android - Retrofit Multipart 사용 방법, 파일 업로드하기
    • Android - 카메라와 사진첩을 이용하여 이미지 뷰에 사진 출력하기
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바