Задать вопрос
@SimpleName

Как передавать данные из RecyclerView в фрагмент, который открывается по нажатию элементов списка?

Есть RecyclerView c несколькими элементами, каждый из которых ведет на один и тот же фрагмент. Можно ли через setArguments передавать данные для фрагмента? (например, чтобы при нажатии на первый элемент в фрагменте появлялся "текст1", при нажатии на второй элемент - "текст2" и т.д.). Как это сделать?
адаптер RecyclerView
public class GalleryGridAdapter extends RecyclerView.Adapter<GalleryGridAdapter.ViewHolder> {

    private CompanyFragment mContext;
    private ArrayList<CompanyObject> imageList;

    public GalleryGridAdapter(CompanyFragment mContext, ArrayList<CompanyObject> imageList){
        this.mContext=mContext;
        this.imageList=imageList;
    }

    public interface ItemClickListener {
        void onItemClick(int position);
    }

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

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CompanyMenuFragment newFragment = new CompanyMenuFragment();
                ((AppCompatActivity) itemView.getContext()).getSupportFragmentManager().beginTransaction()
                        .replace(R.id.content_frame, newFragment)
                        .addToBackStack(null)
                        .commit();
            }
        });

        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        CompanyObject image = imageList.get(position);
        Glide.with(mContext).load(image.getCompanyImage()).into(holder.imageGallery);
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        public ImageView imageGallery;

        public ViewHolder(View view) {
            super(view);
            imageGallery = itemView.findViewById(R.id.tile_picture);
        }
    }
}

модель для RecyclerView
public class CompanyObject {

    public int companyImage;



    public CompanyObject(int companyImage) {
        this.companyImage = companyImage;
    }


    public int getCompanyImage() {
        return companyImage;
    }

    public void setGalleryImage(int galleryImage) {
        this.companyImage = galleryImage;
    }
}

данные для RecyclerView
private void prepareData()
{
    SimpleObject item = new SimpleObject(R.drawable.image);
    recyclerList.add(item);

    item = new SimpleObject(R.drawable.image1);
    recyclerList.add(item);

    item = new SimpleObject(R.drawable.image2);
    recyclerList.add(item);

    mAdapter.notifyDataSetChanged();
}

  • Вопрос задан
  • 640 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@zakkav
Добавить данные в фрамент:

Bundle args = new Bundle();
args.putString("MY_TAG", value);
CompanyMenuFragment newFragment = new CompanyMenuFragment();
newFragment.setArguments(args);

Достать данные во фрагменте:
Bundle b = getArguments();
String s = b.getString("MY_TAG");
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы