Как да покажете пакет във фрагмент с RecyclerView

Опитвам се да разбера как бих показал данните от пакета, които имам в моя фрагмент, и да ги покажа в RecyclerView. В метода onClick на моята дейност получавам входните данни от потребителя и увивам стойностите в пакет. След това го изпращам на фрагмента, за да се покаже в RecyclerView. Малко съм объркан как бих направил настройката на моя RecyclerView Adapter за показване на данните от пакета Всяка помощ ще бъде много оценена. Мога да покажа данни в 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() във вашето име extras, след това 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