0

所以我在一個RecyclerView中有一個CardView,裏面有一些數據。我想點擊特定卡片並啓動一個新的片段,顯示CardView中數據的特定數據(有關CardView中數據的更多詳細信息)。這是相關的代碼。將數據從CardView中的RecyclerView發送到新的片段?

我在編程和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,它對任何列表項都是一樣的),我爲適配器中的視圖項目創建一個點擊偵聽器。當用戶點擊物品/卡片視圖時,我派遣物品點擊事件。這是您如何響應的選擇 - 您可以使用標準回調接口(並在創建適配器時傳入偵聽器)或使用諸如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*/)); 
} 
相關問題