实际上,我正在尝试制作一个可以在餐馆中接受订单的应用程序。
大概您知道,当服务员点菜时,他可以从菜单中添加任何项目来记录(例如笔记本),甚至可以为添加的项目添加变体。
例如,我在应用程序中有一个披萨菜单,当我按菜单中的某些项目时,将其添加到笔记本中(菜单和笔记本为2 RecyclerView),然后将其添加到笔记本中,我可以通过添加子项目来“修改”它们还是最好的孩子。
或更好的是,我的笔记本上有3个不同的比萨,只需单击其中的一个,我就可以添加从另一个回收站视图中选择的变体“ PIZZA”和变体“ WITH PEPERONI”或“ WITHOUT PEPERONI”或“ WITH MOZZARELLA” 。
现在,我认为我的应用程序运行良好,就像我已经拥有了我所需要的一样,正如您可以在此GIF上看到的那样,我正在将recyclerView“食品”添加到“ NOTEBOOK” recyclerView中的某些项目,然后按VARIANTI i能够将子项添加到上次添加的食品中。
但是问题来了,当我必须删除添加到食物中的单个变量时,我会对如何单击单个变量并能够删除单个变量提出一些建议。
这是我的适配器代码:
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();
首先转到您的适配器并声明一个接口,如下所示:
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
方法中,将点击侦听器添加到视图中,将值分配给您的interfaces
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);
}
});
现在,执行此操作之后,您需要在活动/片段中实现以下接口:
Your Activity extends AppCompatActivity implements YourAdapter.InterfaceName
以便您可以使用这些。这样,您将在活动中获取值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句