recyclerview 안에 recyclerview
조회수 2516회
안녕하세요 어떤 프래그먼트에서 recyclerview 안에 json 데이터를 받아와 뿌려주고 뷰를 클릭했을 때 밑에 Gone햇던 뷰가 나타나게 했습니다. 그런데 나타난 뷰 안에 또 json 데이터를 받아오려고 하는데 recyclerView 속에 recyclerView를 넣는 것이 가능한가요? 만약 안되면 어떤 방식으로 해야하나요? ㅜ
2 답변
-
물론 가능합니다. 단순히 ViewGroup안에 ViewGroup를 넣는 것이라고 생각하면 이해가 쉽지않을까 싶고요. 예전에도 유사한 질문에 답변을 남겨지만 짚고 넘어가야 할 부분이 리사이클러뷰 안에 리사이클러뷰를 넣어야지만 만들 수 있는 UI인가 입니다.
- 리사이클러뷰의 아이템을 클릭
- 숨겨져있던 뷰를 보이도록 처리
- 서버로부터 데이터 요청 (빈 화면이 어색하다면 로딩 프로그레스 노출)
- 데이터를 성공적으로 받으면 View에 데이터를 바인드
대략 이런 흐름이 될 것 같은데요. 4번에서 받은 데이터를 View로 보여줄 때, 리사이클러뷰의 대안으로 LinearLayout, RelativeLayout과 같은 뷰그룹으로 만들 수 있는 뷰인지 확인 해보세요.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 네네 예전에도 비슷한 질문을 해서 답변을 해주셨어요!! 1, 2 번은 가능해졌어요! 그런데 숨겨져있던 뷰를 보이도록 하고 그 뷰에서 json 데이터를 또 받아와야 하는데 데이터가 적을수도 있고 많을수도 있어서 리스트뷰나 리사이클러뷰에다 넣어서 보여줘야 하는데요. 음 데이터 요청을 어디서 해야 하나요? 제 어댑터를 밑에 답변에 첨부할게요 kyudongPark 2017.3.13 13:33
-
@Override public void onBindViewHolder(final ViewHolder holder, final int position) { final BestCommentsRvItem item = bestCommentsRvItemArrayList.get(position); holder.Best_comments_Name.setText(item.best_comments_name); holder.Best_comments_content.setText(item.spanned_content); holder.Best_comments_replyCounts.setText(item.best_comments_replyCounts); holder.Best_comments_likeCount.setText(item.best_comments_likeCount); holder.Best_comments_dislikeCount.setText(item.best_comments_dislikeCount); holder.Best_comments_Time.setText(item.best_comments_time); holder.Best_RvLL.setVisibility(item.visibility ? View.GONE : View.VISIBLE); holder.Best_comments_replyCounts.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(item.visibility) { try { adapter2 = new ReplyCommentsRvAdapter(replyCommentsRvItemArrayList2); holder.Best_comments_RvRv.setAdapter(adapter2); writeReplyCommentInterface.doGetReplyRequest(url + item.id, adapter2, replyCommentsRvItemArrayList2); } catch (IOException e) { e.printStackTrace(); } holder.Best_RvLL.setVisibility(View.VISIBLE); item.visibility=false; } else if(!item.visibility) { holder.Best_RvLL.setVisibility(View.GONE); item.visibility=true; } } }); Picasso.with(context).load(item.getBest_comments_ImageView()).resize(70,70).into(holder.Best_comments_Iv); } public class ViewHolder extends RecyclerView.ViewHolder { TextView Best_comments_Name; TextView Best_comments_Time; ImageView Best_comments_Iv; TextView Best_comments_content; TextView Best_comments_replyCounts; TextView Best_comments_likeCount; TextView Best_comments_dislikeCount; //TextView Best_comments_BEST; LinearLayout Best_RvLL; LinearLayout Best_LL; RecyclerView Best_comments_RvRv; LinearLayoutManager llm2; public ViewHolder(View itemView) { super(itemView); Best_comments_Name = (TextView) itemView.findViewById(R.id.best_comments_name); Best_comments_Time = (TextView) itemView.findViewById(R.id.best_comments_time); Best_comments_content = (TextView) itemView.findViewById(R.id.best_comments_content); Best_comments_likeCount = (TextView) itemView.findViewById(R.id.best_comments_likeCount); Best_comments_dislikeCount = (TextView) itemView.findViewById(R.id.best_comments_dislikeCount); Best_comments_replyCounts = (TextView) itemView.findViewById(R.id.best_comments_replyCounts); Best_comments_Iv = (ImageView) itemView.findViewById(R.id.best_comments_Iv); // Best_comments_BEST = (TextView) itemView.findViewById(R.id.best_comments_BEST); Best_RvLL = (LinearLayout) itemView.findViewById(R.id.bestRVLL); Best_LL = (LinearLayout) itemView.findViewById(R.id.bestLL); Best_comments_RvRv = (RecyclerView) itemView.findViewById(R.id.bestRvRv); llm2 = new LinearLayoutManager(itemView.getContext()); llm2.setOrientation(LinearLayoutManager.VERTICAL); Best_comments_RvRv.setLayoutManager(llm2); } }
}
이런식으로 리사이클러뷰의 어댑터 속에 또 하나의 리사이클러뷰를 넣었는데 데이터 통신을 인터페이스를 통해서 부모 리사이클러뷰를 정의해서 통신했던 액티비티에서 하려고 했는데 잘 안되네요 ㅜ 어떡해야할까요
댓글 입력