0

그래서 내부에 데이터가있는 RecyclerView에 CardView가 있습니다. 특정 카드를 클릭하고 CardView의 데이터에서 특정 데이터를 표시하는 새로운 조각을 실행하고 싶습니다 (CardView의 데이터에 대한 자세한 내용). 다음은 관련 코드입니다.RecyclerView의 CardView에서 새 조각으로 데이터를 보내시겠습니까?

프로그래밍 및 Android에 대한 경험이 많지 않으므로 도움을 받으실 수 있습니다.

DetailsFragment :`

public class DetailsFragment extends Fragment { 

private CardView cardView; 

private RecyclerView rv; 

private List<Detail> detailList = new ArrayList<>(); 


public DetailsFragment() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_details, container, false); 

    Context context = getActivity(); 
    cardView = (CardView) rootView.findViewById(R.id.cv); 
    rv = (RecyclerView) rootView.findViewById(R.id.rv); 

    final LinearLayoutManager llm = new LinearLayoutManager(context); 
    rv.setLayoutManager(llm); 

    RVDetailAdapter adapter = new RVDetailAdapter(detailList); 
    rv.setAdapter(adapter); 

    initializeData(); 
    initializeAdapter(); 

    return rootView; 

} 

private void initializeData() { 
    detailList = new ArrayList<>(); 
    //  not sure here 
    detailList.add(new Detail(" ")); 
} 

private void initializeAdapter(){ 
    RVDetailAdapter adapter = new RVDetailAdapter(detailList); 
    rv.setAdapter(adapter); 
} 

} 

RVNewsAdapater :

public class RVNewsAdapter extends RecyclerView.Adapter<RVNewsAdapter.NewsViewHolder> { 

public static final String KEY_LINK ="link"; 

public static class NewsViewHolder extends RecyclerView.ViewHolder 
    implements View.OnClickListener { 
    private static final String TAG = "Hello"; 
    CardView cv; 
    TextView date; 
    TextView link; 
    TextView title; 
    TextView today; 


    public NewsViewHolder(View itemView) { 
     super(itemView); 
     cv = (CardView) itemView.findViewById(R.id.cv); 
     date = (TextView) itemView.findViewById(R.id.date); 
     link = (TextView) itemView.findViewById(R.id.link); 
     title = (TextView) itemView.findViewById(R.id.heading); 
     today = (TextView) itemView.findViewById(R.id.today); 

     itemView.setOnClickListener(this); 
    } 


    @Override 
    public void onClick(View view) { 
     Context context = view.getContext(); 

     Intent intent = null; 

     for(int postion = 0; postion<42; postion++) { 
      intent = new Intent(context, Details.class); 

     } 

     context.startActivity(intent); 
    } 



} 

List<News> news; 

RVNewsAdapter(List<News> news) { 
    this.news = news; 
} 

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
} 

@Override 
public RVNewsAdapter.NewsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.itemnewsfeed, viewGroup, false); 
    NewsViewHolder nvh = new NewsViewHolder(v); 
    return nvh; 
} 

@Override 
public void onBindViewHolder(NewsViewHolder newsViewHolder, int i) { 
    newsViewHolder.date.setText(news.get(i).date); 
    newsViewHolder.link.setText(news.get(i).link); 
    newsViewHolder.title.setText(news.get(i).title); 
    newsViewHolder.today.setText(news.get(i).today); 
} 

@Override 
public int getItemCount() { 
    if (news != null) { 
     return news.size(); 
    } 
    return 0; 
} 
} 

RVDetailAdapter :

public class RVDetailAdapter extends RecyclerView.Adapter<RVDetailAdapter.DetailViewHolder> { 


public static class DetailViewHolder extends RecyclerView.ViewHolder { 
    TextView link; 

    public DetailViewHolder(View itemView) { 
     super(itemView); 

     link = (TextView) itemView.findViewById(R.id.link); 
    } 
} 

List<Detail> detail; 

RVDetailAdapter(List<Detail> detail) { 
    this.detail = detail; 
} 

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
} 

@Override 
public RVDetailAdapter.DetailViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.itemnewsfeed, viewGroup, false); 
    DetailViewHolder dvh = new DetailViewHolder(v); 
    return dvh; 
} 

@Override 
public void onBindViewHolder(DetailViewHolder detailViewHolder, int i) { 
    detailViewHolder.link.setText(detail.get(i).link); 

} 

@Override 
public int getItemCount() { 
    if (detail != null) { 
     return detail.size(); 
    } 
    return 0; 
} 
} 

답변

0

여전히 대답을 찾고 있다면 모르겠지만, 난 그냥 게시물을보고하지 않음 내가 너에게 하나의 선택권을 주겠다고 생각했다.

RecyclerView를 사용할 때 (CardView를 사용하는지 여부는 문제가되지 않습니다. 모든 목록 항목에서 동일합니다) 어댑터에서보기 항목에 대한 클릭 수신기를 만듭니다. 사용자가 item/cardview를 클릭하면 항목 클릭 이벤트가 발생합니다. 응답 방법에 대한 선택입니다. 표준 콜백 인터페이스를 사용하고 (어댑터를 만들 때 리스너를 전달하거나) EventBus와 같은 것을 사용할 수 있습니다.

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false); 

    view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      itemClick(view); 
     } 
    }); 

    return new ViewHolder(view); 
} 

private void itemClick(View view) { 
    //Handle item event here 
    //EventBus.getDefault().post(new ItemSelectedEvent(/*send apprpopriate data*/)); 
} 
: 여기

는 어댑터 클래스에 추가 할 코드의 예
관련 문제