안드로이드 Recyclerview /Adapter/ itmeviewHolder

푸른하늘·2021년 11월 21일
1
post-thumbnail

리사이클러뷰(RecyclerView)는 기존에 리스트 형태의 화면 구성에 사용되던 리스트뷰(ListView)에 "유연함(Flexibility)"과 "성능(Performance)"을 더한, 리스트뷰의 확장판 또는 개선판입니다.

1) activity main "recyclerview" 추가
2) "sample_show_item.xml" 만들기
3) Adapter 구현 "RoomsAdapter.Activity" 만들기
4) MainActivity에서 setAdapter와 setLayoutManager 지정

1)"acitivity_main.xml" - 메인액티비티 레이아웃 리소스 XML에 리사이클러뷰 추가.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"> //사용자 directory 위치에 맞게 맞춰주세요


   <androidx.recyclerview.widget.RecyclerView
       android:id="@+id/recyclerView"
       android:orientation="horizontal"
       android:layout_width="match_parent"
       android:layout_height="match_parent"/>



</LinearLayout>


리사이클러뷰(RecyclerView)
사용자 데이터를 리스트 형태로 화면에 표시하는 컨테이너 역할을 수행합니다.
즉, 쉽게 말하자면 데이터가 들어갈 그릇(틀)을 만들어주는 컨테이너 역할입니다.

어뎁터(Adapter)
리사이클러뷰에 표시될 아이템 뷰를 생성하는 역할은 어댑터가 담당 합니다.

레이아웃매니저(LayoutManager)
리사이클러뷰가 아이템을 화면에 표시할 때, 아이템 뷰들이 리사이클러뷰 내부에서 배치되는 형태를 관리하는 요소입니다.

2) "RoomsAdapter.acitivty" 추가 및 코드

  // 아이템 뷰를 저장하는 뷰홀더 클래스.
public class RoomsAdapter extends RecyclerView.Adapter<RoomsAdapter.ViewHolder> {
    ArrayList<Room> list;
    Context context;
    private static final String TAG = "RoomsAdapter";

    public RoomsAdapter(ArrayList<Room> roomlist, Context context) {
        this.list= roomlist;
        this.context = context;
    }
    @NonNull
    @Override
  // onCreateViewHolder() - 아이템 뷰를 위한 뷰홀더 객체 생성하여 리턴.
    public ViewHolder onCreateViewHolder(@NonNull  ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.sample_show_room, parent,false);
        return new ViewHolder(view);
    }

    @Override
    // onBindViewHolder() - position에 해당하는 데이터를 뷰홀더의 아이템뷰에 표시. 
    public void onBindViewHolder(@NonNull  ViewHolder holder, int position) {
        Room room = list.get(position);  //users 리스트 포지션 잡고 피카소 모형에다가 이미지 삽입
       //안에 들어가는 값들 넣는법 
       	holder.roomname.setText(room.getRoomTitle());//username도 얻음
        holder.roomlocation.setText(room.getRoomlocation());
        holder.roomdate.setText(room.getRoomdate());

        holder.itemView.setTag(position); // 값 가져오고고

       holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG,"Roomitem onclick");
                startToast("itme을 클릭하셨습니다.");
                //Intent intent = new Intent(context, RoomseceondlistActivity.class);
                //intent.putExtra("RoomId", room.getRoomId());
               // intent.putExtra("Roomtitle",room.getRoomTitle());
                //intent.putExtra("Roomprofilepic",room.getRoomprofilepic());
                // intent.putExtra("Roomlocation",room.getRoomPlace());
                //intent.putExtra("Room");

                // context.startActivity(intent);
            }
        });
       holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
           @Override
           public boolean onLongClick(View v) {
               Log.d(TAG,"오래 누르면 방 상세페이지가 뜨게 만들것입니다.");
               startToast("item을 오래 클릭하셨습니다.");
               return false;
           }
       });
    }

    @Override
    public int getItemCount(){
 // getItemCount() - 전체 데이터 갯수 리턴.
        return  list.size();
    }

// 뷰 객체에 대한 참조. (hold strong reference)
    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView roomname, roomlocation, roomdate;
        ImageView image;
        public ViewHolder(@NonNull  View itemView) {
            super(itemView);


            roomname = itemView.findViewById(R.id.roomname);
            roomlocation = itemView.findViewById(R.id.roomlocation);
            roomdate = itemView.findViewById(R.id.roomdate);

        }
    }
    private  void startToast(String msg){
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }

}

Main acitivty에 추가하기

ublic class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    FragmentMentorBinding binding;
    private static final String TAG = "MainActivity";
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        database = FirebaseDatabase.getInstance();
        binding = FragmentMentorBinding.inflate(inflater, container, false);
        db = FirebaseFirestore.getInstance();
        ArrayList<Room> list = new ArrayList<>();
        RoomsAdapter adapter =  new RoomsAdapter(list, getContext());

        binding.MentorrecyclerView.setHasFixedSize(true);
        binding.MentorrecyclerView.setAdapter(adapter);

        LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
        binding.MentorrecyclerView.setLayoutManager(layoutManager);
        }
  }
profile
Developer-Android-CK

0개의 댓글