0

Итак, у меня есть CardView в RecyclerView, в котором есть некоторые данные внутри него. Я хотел бы щелкнуть по определенной карте и запустить новый фрагмент, который отображает конкретные данные из данных в 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*/)); 
} 
Смежные вопросы