gpt4 book ai didi

android - 如何在 RecyclerView 中添加/删除子项,对 Order Restaurant App 的建议?

转载 作者:行者123 更新时间:2023-11-29 23:48:39 28 4
gpt4 key购买 nike

实际上,我正在尝试制作一款允许在餐厅接受订单的应用。

您可能知道,当服务员点菜时,他可以将菜单中的任何项目添加到记录(类似于笔记本)中,甚至还可以为添加的项目添加变体。

例如,当我从菜单中按下某些项目时,我的应用程序中有一个比萨菜单,它被添加到笔记本中(菜单和笔记本是 2 RecyclerView),在我添加了比萨类型之后,我可以通过以下方式“修改”它们添加一个子项目或更好的 child 到主要项目。

或者更好的是,我的笔记本上有 3 种不同的披萨,通过单击其中一个,我将能够添加从另一个 recyclerView 中选择的变体作为“PIZZA”和变体“WITH PEPERONI”或“WITHOUT PEPERONI”或“WITH更多马苏里拉奶酪”。

现在我认为我对应用程序做得很好,因为我已经拥有了我需要的所有东西,正如你在这个 GIF 上看到的那样,我正在从 recyclerView“FOOD”添加到“NOTEBOOK”recyclerView 一些项目并通过按 VARIANTI 我可以将子项添加到上次添加的食物中。

enter image description here enter image description here

但是当我必须删除添加到食物中的单个 VARIANT 时,问题就来了,我会就如何点击单个 VARIANT 并能够删除单个 VARIANT 提出一些建议。

这是我的适配器代码:

   public class AdapterPTERM extends RecyclerView.Adapter<AdapterPTERM.ExampleViewHolder> {

private List<ItemPTERM> mExampleList;
private final LayoutInflater mInflater;
private OnItemClickListener mListener;
private List<Variant> variants;
private ManageAddRemoveCallbacks mManageAddRemoveCallbacks ;


private View.OnClickListener varientClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v.getTag()!= null){
int position = (int) v.getTag();
}
}
};

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

public void setOnItemClickListener(OnItemClickListener listener){
mListener = listener;
}

@NonNull
@Override
public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_pterm,parent,false);
return new ExampleViewHolder(v,mListener);
}

AdapterPTERM(Context context, List<ItemPTERM> exampleList){
mExampleList = exampleList;
mInflater = LayoutInflater.from(context);
}

@Override
public void onBindViewHolder(@NonNull final ExampleViewHolder holder, final int position) {
final ItemPTERM item = mExampleList.get(position);

holder.desc.setText(item.getBtnName());
holder.qta.setText(String.valueOf(item.getQuant()));

holder.variantsContainer.removeAllViews();


// ADDING CHILD HERE

variants = item.getVariants();
if (variants != null && variants.size() > 0){
for(Variant v : variants){
View vView = mInflater.inflate(R.layout.variant_layout,holder.variantsContainer,false);
TextView nameTV = vView.findViewById(R.id.variant_name);
nameTV.setText(v.getName());
vView.setTag(position);
vView.setOnClickListener(varientClickListener);
holder.variantsContainer.addView(vView);

}
}

tvAddItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
void onAddItem(true);
}
});

tvRemoveItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
void onBtnClickRemoveItem(true);
}
});

// NOT IMPORTANT (CHANGING FIELDS COLOR)
if(position % 2 == 0 ){
holder.itemView.setBackgroundColor(Color.parseColor("#C0C0C0"));

}else if(position % 2 == 1){
holder.itemView.setBackgroundColor(Color.parseColor("#D3D3D3"));
}

}

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

public class ExampleViewHolder extends RecyclerView.ViewHolder {

public TextView desc;
public TextView qta;
private LinearLayout variantsContainer;

ExampleViewHolder(View itemView, final OnItemClickListener listener) {
super(itemView);


desc = itemView.findViewById(R.id.Desc);
qta = itemView.findViewById(R.id.Qta);
variantsContainer = itemView.findViewById(R.id.ll_child_items);

try {
mManageAddRemoveCallbacks = ((ManageAddRemoveCallbacks) this);
} catch (ClassCastException e) {
throw new ClassCastException("ManageAddRemoveCallbacks must implement ManageAddRemoveCallbacksCallback.");
}

itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null){
int position = getAdapterPosition();
if(position != RecyclerView.NO_POSITION){
listener.onItemClick(position);
}
}
}
});

}
}



public void removeItem(int position) {
mExampleList.remove(position);
notifyItemRemoved(position);
}

public interface ManageAddRemoveCallbacks {
void onAddItem(boolean isAdded);

void onBtnClickRemoveItem(boolean isRemoved);
}

}

最佳答案

您可以在它们各自的click listeners();上实现接口(interface),首先转到您的适配器并像这样声明一个接口(interface):

 private ManageAddRemoveCallbacks mManageAddRemoveCallbacks ;

public interface ManageAddRemoveCallbacks {
void onAddItem(boolean isAdded);

void onBtnClickRemoveItem(boolean isRemoved);
}

现在在您的 viewHolder 中初始化您的界面:

 try {
this.mManageAddRemoveCallbacks = ((ManageAddRemoveCallbacks) currentFragment);
} catch (ClassCastException e) {
throw new ClassCastException("ManageAddRemoveCallbacks must implement ManageAddRemoveCallbacksCallback.");
}

现在在您的bind 方法中,您将在其中添加click listeners 到您的views 并为您的接口(interface)

  tvAddItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
void onAddItem(ture or false depending on your requirements);
}
});


tvRemoveItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
void onBtnClickRemoveItem(ture or false depending on your requirements);
}
});

完成之后,您需要在您的 Activity/fragment 中实现这些接口(interface),如下所示:

Your Activity extends AppCompatActivity implements YourAdapter.InterfaceName

这样你就可以使用这些了。通过这种方式,您将获得 Activity 中的值。

关于android - 如何在 RecyclerView 中添加/删除子项,对 Order Restaurant App 的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51137190/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com