即使我分配了带有元素的数组列表,我的数组列表仍然为空?

时间:2019-12-30 04:52:41

标签: java android android-fragments android-recyclerview recycler-adapter

我在FoodListFragment中有一个食物清单,当单击Ok按钮时,我希望将该食物添加到OrderFoodList中,以便可以在{{1}中显示它},但似乎我不知道如何正确地将数组列表从CartOrderFragment传递到FoodListFragment,因为CartOrderFragment中的列表仍然为空!

这是我要添加到购物车订单中的食物。

FoodListFragment.java

CartOrderFragment

FoodListAdapter.java

public class FoodListFragment extends Fragment {

private EditText etSearchInput;
private RecyclerView recyclerView;
private FoodListAdapter foodListAdapter;
private BadgeHolderLayout badgeHolderLayout;
private List<Food> foods;

public interface ListenerFoodListFragment {
    void sendToCart(int value, int adapterPosition);
    void cartClickListener();
    void orderedList(List<Food> foods);
}

private ListenerFoodListFragment listenerFoodListFragment;

@Override
public void onAttach(@NonNull Context context) {
    super.onAttach(context);
    try {
        listenerFoodListFragment = (ListenerFoodListFragment) context;
    } catch (ClassCastException e) {
        Log.d("FoodListFragment", "onAttach: " + e.getMessage());
    }
}

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

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    recyclerView = view.findViewById(R.id.recyclerview_foodlist);
    badgeHolderLayout = view.findViewById(R.id.badge);
    etSearchInput = view.findViewById(R.id.food_list_search_input);
}


@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    foods = new ArrayList<>();
    foods.add(new Food("Burger", "1000$", R.drawable.burger));
    foods.add(new Food("Burger", "1000$", R.drawable.burger));

    foodListAdapter = new FoodListAdapter(getActivity(), foods, listenerFoodListFragment);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(foodListAdapter);
   }
}

CartOrdersFragment(我希望订单列表显示在这里)

public class FoodListAdapter extends RecyclerView.Adapter<FoodListAdapter.ViewHolder> implements Filterable {

private Context context;
private List<Food> foodList;
private List<Food> foodListFiltered;
private List<Food> foodOrdered;
FoodListFragment.ListenerFoodListFragment listenerFoodListFragment;


public FoodListAdapter(Context context, List<Food> foodList,
                       FoodListFragment.ListenerFoodListFragment listenerFoodListFragment) {
    this.context = context;
    this.foodList = foodList;
    this.listenerFoodListFragment = listenerFoodListFragment;
    this.foodListFiltered = foodList;
    this.foodOrdered = new ArrayList<>();
}


@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    Food food = foodListFiltered.get(position);


    holder.tvFoodTitle.setText(food.getTitle());
    holder.tvFoodImage.setImageResource(food.getImage());
    holder.tvPrice.setText(food.getPrice());
}

@Override
public int getItemCount() {
    return foodListFiltered.size();
}


}

public class ViewHolder extends RecyclerView.ViewHolder {
    TextView tvOk;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);

      // where i am handling the click
        tvOk.setOnClickListener(v -> {
            Food food = foodList.get(getAdapterPosition());
            foodOrdered.add(food);
            listenerFoodListFragment.orderedList(foodOrdered);
                });

        }
    }
}

CartOrderAdapter.java

public class CartOrdersFragment extends Fragment {

private RecyclerView recyclerView;
private CartOrdersAdapter cartOrdersAdapter;
private List<Food> foods;


@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    foods = new ArrayList<>();

    cartOrdersAdapter = new CartOrdersAdapter(getActivity(), foods);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setAdapter(cartOrdersAdapter);

}

// receiving the list from the activity
public void getOrdered(List<Food> foodsOrdered) {
    foods = foodsOrdered;
   } 
}

MainActivity.java

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

private Context context;
private List<Food> foods;

public CartOrdersAdapter(Context context, List<Food> foods) {
    this.context = context;
    this.foods = foods;
}


@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    Food food = foods.get(position);

    holder.tvTitle.setText(food.getTitle());
    holder.ivFood.setImageResource(food.getImage());
    holder.tvPrice.setText(food.getPrice());

}

@Override
public int getItemCount() {
    return foods.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
    }
}
}

1 个答案:

答案 0 :(得分:0)

您需要更新购物车适配器列表,而不是CartFragment列表。

public void getOrdered(List<Food> foodsOrdered) {
    cartOrdersAdapter.setItems(foodsOrdered);
   } 
}

在CartOrdersAdapter中

void setItems(List<Food> list)) {
    foods.clear();
    foods.addAll(list);
    notifyDataSetChanged();
}