프로그래밍/부스트코스

부스트 코스 에이스 미션 6 (RecyclerView, 개선사항)

돌및쓰고 2019. 9. 6. 00:57

1차 PASS

 

1. RecyclerView

써도써도 금방까먹는다

public class MovieGallaryAdapter extends RecyclerView.Adapter<MovieGallaryAdapter.Holder> {
    ArrayList<String> list;
    Activity context;
    String thumb;

    public MovieGallaryAdapter(ArrayList<String> list, Activity context, String thumb) {
        this.list = list;
        this.context = context;
        this.thumb = thumb;
    }


    @NonNull
    @Override
    public Holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.item_movie_gallary, viewGroup, false);
        return new Holder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull Holder holder, final int i) {
        final String url = list.get(i);
        if (url.contains("youtu.be") || url.contains("youtube")) {
            Glide.with(context).load(thumb).centerCrop().into(holder.photo);
            holder.video.setVisibility(View.VISIBLE);
            holder.photo.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent();
                    intent.setData(Uri.parse(url));
                    context.startActivity(intent);
                }
            });
        } else {
            Glide.with(context).load(list.get(i)).into(holder.photo);
            holder.video.setVisibility(View.INVISIBLE);
            holder.photo.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(context, PhotoDetailActivity.class);
                    intent.putExtra("url", url);
                    context.startActivity(intent);
                }
            });
        }

    }


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

    class Holder extends RecyclerView.ViewHolder {
        public ImageView photo;
        public ImageView video;
        public String url;

        public Holder(@NonNull View itemView) {
            super(itemView);
            photo = itemView.findViewById(R.id.iv_movie_gallary_photo);
            video = itemView.findViewById(R.id.iv_movie_gallary_video);
        }
    }
}

 

2. PhotoView

줌기능을 간단하게 사용가능한 라이브러리

직접만들어보니 샘플링이 복잡

 

https://github.com/chrisbanes/PhotoView

 

chrisbanes/PhotoView

Implementation of ImageView for Android that supports zooming, by various touch gestures. - chrisbanes/PhotoView

github.com

 

3.. 개선사항

1. 접근제어자 잘붙이기

 -귀찮아도 생각하고 붙이자
2. string.xml 활용

- 네이밍이 너무 어렵다.
3. 변수명에 언더바쓰지않기

- 전혀 몰랏던내용 앞으로 숙지하자

4. 액티비티간 데이터공유 방법 고민

- static으로 불러오는 방식이 맞는지 고민중

5. getInstance는 싱글톤 객체에만 사용

6, e.printstacktrace 지양 - 성능 및 보안에 취약함 관련내용 포스팅

7. 클래스를 좀더 세분화하여 코드분석시에 결과만 신경쓸 수 있도록 수정

8. getcontext or this 대신 applicationcontext를 전달하여 사용하는것이 좋음

9. gson의 typetoken메소드 방식 고려

10. if나 for쓸때 한줄이라도 괄호 붙이기 아니면 한줄로 처리