RecyclerView를 GridView처럼 사용하는 방법

조회수 469회

어댑터가 참조하는 뷰는 nameText와 dataText 뿐입니다.

이미지

DB는 이런식입니다.

이미지

SearchView로 이름을 검색했을 때 GridView처럼 이런식으로 나왔으면 좋겠습니다.

JOHN1 JOHN1 JOHN1 JOHN1
10    20    30    40

그런데 Adapter에 데이터를 어떻게 가져오는지 모르겠습니다.

public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> {

    List<Data> dataList;
    Context context;

    public Adapter(List<Data> dataList, Context context) {
        this.dataList = dataList;
        this.context = context;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);

        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
//        holder.nameText.setText(dataList.get(position).getName());
//        holder.dataText.setText(dataList.get(position).getData1());
//        holder.dataText.setText(dataList.get(position).getData2());
//        holder.dataText.setText(dataList.get(position).getData3());
//        holder.dataText.setText(dataList.get(position).getData4());
    }

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

    public static class MyViewHolder extends RecyclerView.ViewHolder {

        TextView nameText, dataText;

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

            nameText = itemView.findViewById(R.id.nameText);
            dataText = itemView.findViewById(R.id.dataText);
        }
    }
}

onBindViewHolder에 주석처럼 하면 하나의 데이터만 들어가지는데 어떻게 해야하나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 어댑터가 참조하는 View 가 TextView 2개 밖에 없기 때문에 한 줄에 이름, 데이터를 한 세트로 4개씩 출력하고 싶으시다면, holder item 의 xml 에 미리 TextView 를 4 세트로 만들어 두시면 될 것 같습니다.

    그렇지 않다면 그리드 뷰를 사용하시거나, 수평 리스트뷰를 세로 리스트뷰에 담아 사용하시거나 하는 방법을 사용하셔야할것같습니다. 현 상태로 뭔가 마법을 부려 원하는 결과물을 뽑기는 힘들것으로 보입니다.

    
        @Override
        public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
            holder.bindView(dataList.get(position).getName(), 
                    dataList.get(position).getData1(), 
                    dataList.get(position).getData2(), 
                    dataList.get(position).getData3(), 
                    dataList.get(position).getData4());
        }
    
        @Override
        public int getItemCount() {
            return dataList.size();
        }
    
        public static class MyViewHolder extends RecyclerView.ViewHolder {
    
            TextView nameText, data1Text, data2Text, data3Text, data4Text;
    
            public MyViewHolder(@NonNull View itemView) {
                super(itemView);
    
                nameText = itemView.findViewById(R.id.nameText);
                data1Text = itemView.findViewById(R.id.data1Text);
                data2Text = itemView.findViewById(R.id.data2Text);
                data3Text = itemView.findViewById(R.id.data3Text);
                data4Text = itemView.findViewById(R.id.data4Text);
            }
    
            public view bindView(String name, String data1, String data2, String data3, String data4) {
                nameText.setText(name);
                data1Text.setText(data1);
                data2Text.setText(data2);
                data3Text.setText(data3);
                data4Text.setText(data4);
    
            }
        }
    
    
    
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)