Как отобразить пакет во фрагменте с помощью RecyclerView

Я пытаюсь понять, как я буду отображать данные Bundle, которые у меня есть в моем фрагменте, и отображать их в RecyclerView. В методе onClick моей активности я получаю ввод от пользователя и оборачиваю значения в Bundle. Затем я отправляю его во фрагмент, который будет отображаться в RecyclerView. Я немного озадачен тем, как настроить свой адаптер RecyclerView для отображения данных Bundle. Любая помощь будет принята с благодарностью. Я могу показать данные в recyclerview, но я могу отобразить только 1 элемент, который я хочу показать больше, когда я отправляю данные из активности во фрагмент.

Это мой фрагмент

public class BlankFragment extends Fragment {
List<Mydata> mydataList = new ArrayList<>();

public BlankFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View vi =  inflater.inflate(R.layout.fragment_blank, container, false);
    RecyclerView recyclerView = vi.findViewById(R.id.recyclerShop);
    Bundle extras = this.getArguments();
    if(extras != null)
    {
        String nameExtra = extras.getString("name");
        String amountExtra = extras.getString("color");

        //Just add your data in list
        Mydata mydata = new Mydata();  // object of Model Class
        mydata.setAmountExtra(amountExtra );
        mydata.setNameExtra(nameExtra);
        mydataList.add(mydata);

    }

    MyAdapter myAdapter = new MyAdapter(getContext());
    myAdapter.setMyDataList(mydataList);
    recyclerView.setAdapter(myAdapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));


    return vi;
  }
}

Вот адаптер

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

private Context context;
private List<Mydata> myDataList;

public MyAdapter(Context context) {
    this.context = context;
    myDataList = new ArrayList<>();
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    // Replace with your layout
    View view = LayoutInflater.from(context).inflate(R.layout.shop_item_layout, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    // Set Your Data here to yout Layout Components..
    holder.tvName.setText(myDataList.get(position).getNameExtra());
    holder.tvColor.setText(myDataList.get(position).getAmountExtra());
    // to get Amount
   // myDataList.get(position).getAmountExtra();

}

@Override
public int getItemCount() {
    if (myDataList.size() != 0) {
        // return Size of List if not empty!
        return myDataList.size();
    }
    return 0;
}

public void setMyDataList(List<Mydata> myDataList) {
    // getting list from Fragment.
    this.myDataList = myDataList;
    notifyDataSetChanged();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    ImageView imageShop;
    TextView tvName,tvColor,tvamount;
    EditText etBodySize,etAllAmount;
    public ViewHolder(View itemView) {
        super(itemView);
        imageShop = itemView.findViewById(R.id.imgShop);
        tvName = itemView.findViewById(R.id.tvClothesName);
        tvColor =itemView.findViewById(R.id.tvColor);
        tvamount = itemView.findViewById(R.id.tvfiyat);
        etBodySize = itemView.findViewById(R.id.etAmount);
        etAllAmount = itemView.findViewById(R.id.etAllAmount);

        // itemView.findViewById
    }
  }
}

Наконец класс MyData

public class Mydata {
    String nameExtra;

    String amountExtra;

    public Mydata(String nameExtra, String amountExtra) {
        this.nameExtra = nameExtra;
        this.amountExtra = amountExtra;
    }

    public Mydata() {
    }

    public String getAmountExtra() {
        return amountExtra;
    }

    public void setAmountExtra(String amountExtra) {
        this.amountExtra = amountExtra;
    }

    public String getNameExtra() {
        return nameExtra;
    }

    public void setNameExtra(String nameExtra) {
        this.nameExtra = nameExtra;
    }
}

Затем, когда я отправляю данные и открываю фрагмент

blankFragment = new BlankFragment();
            Bundle bundle = new Bundle();
            bundle.putString("name",clothesRecycler.data.get(position).getName());
            bundle.putString("color",clothesRecycler.data.get(position).getColor());
            blankFragment.setArguments(bundle);
            manager = getSupportFragmentManager();
            manager.beginTransaction().add(R.id.container,blankFragment).addToBackStack(null).commit();

person life4    schedule 20.07.2020    source источник
comment
Вы создали список, который имеет один объект. Для отображения большего количества элементов передайте объект списка и установите его в свой адаптер.   -  person Kuvonchbek Yakubov    schedule 21.07.2020
comment
В вашем макете shop_item _layout. у вас есть высота match_parent для каждого элемента? использовать обертку. может быть, вы не видите, что другие видят это.   -  person Emmanuel Montt    schedule 21.07.2020
comment
@EmmanuelMontt, который я использую с оберткой   -  person life4    schedule 21.07.2020
comment
@KuvonchbekYakubov я сделал это. разве я не делал   -  person life4    schedule 21.07.2020


Ответы (1)


Добавьте exras.hasExtras() в дополнение к вашему имени, затем getStringExtra() и добавьте точку останова, чтобы убедиться, что вы передаете достоверные данные. Я предполагаю, что вы не получаете данные, которые вы ожидаете. Не вижу проблем с адаптером.

if(this.getArguments().hasExtras("name") && this.getArguments().hasExtras("color")){
    //do whatever
}
person The_Martian    schedule 20.07.2020
comment
я не могу добавить дополнительные функции метода hasExtras() не имеет hasExtras() - person life4; 21.07.2020
comment
я обновил сообщение, я ошибаюсь, когда отправляю данные во фрагмент - person life4; 21.07.2020