实际上,我正在尝试开发一家可以接受订单的餐厅。
但是实际上我在给食物添加变体时遇到了一些问题。我会更好地解释,我有一个recyclerView“食品”,我从中将物品添加到另一个recyclerView“ NOTEBOOK”中,就像服务员注意到某人订购的东西。
在我的应用程序中,我还可以向添加到笔记本的食品添加一些变体,换句话说,我已经将PIZZA添加到了我的笔记本中,并且可以将带有变体的孩子添加到PIZZA中,称为“ BIG”或“ WITH” PEPERONI”或两者兼有。
要添加一个孩子,我在适配器中执行以下操作
public class AdapterPTERM extends RecyclerView.Adapter<AdapterPTERM.ExampleViewHolder> {
private List<ItemPTERM> mExampleList;
private final LayoutInflater mInflater;
private OnItemClickListener mListener;
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
final List<Variant> 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);
}
}
// 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);
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);
}
}
}
});
}
}
private View.OnClickListener varientClickListener=new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("VIEW:", "CLICKED");
}
};
public void removeItem(int position) {
mExampleList.remove(position);
notifyItemRemoved(position);
}
}
现在,我可以单击我添加的每个子项,甚至可以添加一个onSwipe方法,因为我可以从食物中删除特定的变体。
这是屏幕截图,显示了recyclerView和child的外观。
现在如何在活动中使用onClick?
答案 0 :(得分:2)
创建全局OnClickListener
并将侦听器设置为所有变体视图。
public class AdapterPTERM extends RecyclerView.Adapter<AdapterPTERM.ExampleViewHolder> {
private List<ItemPTERM> mExampleList;
private final LayoutInflater mInflater;
private OnItemClickListener mListener;
View.OnClickListener varientClickListener=new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("Click","Called");
}
};
........
}
为每个添加的视图设置侦听器,并将位置设置为标签,并在单击视图时将其取回。
List<Variant> 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);
}
}
现在您可以将侦听器修改为:
View.OnClickListener varientClickListener=new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v.getTag()!=null){
int position= (int) v.getTag();
// Use position to process data
}
}
};
您可以设置多个标签。请参见setTag
方法的变体。