简体   繁体   English

如何使用 RecyclerView 在适配器中设置 OnClickListener 以在片段内显示

[英]How to setOnClickListener in adapter using RecyclerView to display inside fragment

I cannot access the ID of the item to view it in ToastMessage, or even store it in the database (use Room DataBase) I have tried but the message does not appear I need the reference ID to use for database storage and complete the process for storing the shopping cart我无法访问项目的 ID 以在 ToastMessage 中查看它,甚至无法将其存储在数据库中(使用 Room DataBase) 我已经尝试过但消息没有出现 我需要参考 ID 用于数据库存储并完成以下过程存放购物车

itemAdapter.java itemAdapter.java

public class itemAdapter extends RecyclerView.Adapter<itemAdapter.ItemViewHolder> {
    private Context context;
    private ArrayList<Items> arrayList;
    private AdapterView.OnItemClickListener listener;
    public itemAdapter(Context context, ArrayList<Items> arrayList) {
        this.context = context;
        this.arrayList = arrayList;
    }

    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
        return new ItemViewHolder(v);
    }


    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
        holder.name.setText(arrayList.get(position).getItemName());
        holder.desc.setText(arrayList.get(position).getItemDesc());
        holder.price.setText(arrayList.get(position).getItemPrice());
        holder.add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,arrayList.get(position).getItemIid(),Toast.LENGTH_SHORT);
            }
        });
        holder.name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,arrayList.get(position).getItemPrice(),Toast.LENGTH_SHORT);
            }
        });

    }

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

    class ItemViewHolder extends RecyclerView.ViewHolder {

        TextView name, desc, price;
        ImageView remove, add;

        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);
            name = itemView.findViewById(R.id.tvName);
            desc = itemView.findViewById(R.id.tvDesc);
            price = itemView.findViewById(R.id.tvPrice);
            remove = itemView.findViewById(R.id.btnDelete);
            add = itemView.findViewById(R.id.btnAdd);
        }
    }
   
}

MealsFragment.java MealsFragment.java

public class MealsFragment extends Fragment {公共 class MealsFragment 扩展片段 {

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

RecyclerView recyclerView;
itemAdapter adapter;


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


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_meals, container, false);
}

@Override
public void onViewCreated( View view, Bundle savedInstanceState) {
    ArrayList<Items> ItemsList = (ArrayList<Items>) RoomDatabaseSingleton.getInstance(getContext().getApplicationContext())
            .getAppDatabase()
            .getDao()
            .getItems("meals");
    recyclerView = view.findViewById(R.id.rvMeals);
    RecyclerView.LayoutManager manager = new LinearLayoutManager(
            getContext(), RecyclerView.VERTICAL, false);
    recyclerView.setLayoutManager(manager);
    adapter = new itemAdapter(getContext(), ItemsList);
    recyclerView.setAdapter(adapter);

}

} }

Try the following instead请尝试以下操作

       holder.add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,arrayList.get(position).getItemIid(),Toast.LENGTH_SHORT).show();
            }
        });
        holder.name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,arrayList.get(position).getItemPrice(),Toast.LENGTH_SHORT).show();
            }
        });

The static method makeText of Toast is used to create the Toast object and show() method on the Toast object is used to display the Toast Toast的static方法makeText用于创建Toast object Toast上的show()方法object用于显示Toast

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 片段内的 RecyclerView 适配器 - RecyclerView Adapter inside Fragment 如何在片段中设置OnclickListener FAB,该片段将在RecyclerView中添加卡片 - How to setOnclickListener FAB in a fragment that will add a card in a RecyclerView 将适配器设置为片段内部的RecyclerView会导致异常 - Setting adapter to a RecyclerView inside fragment causes Exception 在 Fragment 中使用 RecyclerView 而不是 Activity 会导致 E/RecyclerView: No adapter attached; 跳过布局错误 - Using a RecyclerView inside a Fragment instead of an Activity results in E/RecyclerView: No adapter attached; skipping layout error 如何从同一片段中的其他 recyclerview 适配器刷新 recyclerview 适配器 - How to refresh recyclerview adapter from other recyclerview adapter in same fragment 如何在recyclerview上添加SetOnClicklistener - How to add SetOnClicklistener on recyclerview 如何在片段中使用 recyclerview 适配器布局对象? - How to Use recyclerview adapter layout objects in fragment? 如何从 recyclerview 适配器关闭对话框片段 - How to dismiss a dialog fragment from a recyclerview adapter RecyclerView如何在每个项目上设置OnClickListener? - RecyclerView how to setOnClickListener on every item? 无法在片段中使用适配器显示列表视图 - Unable to display list view using adapter in a fragment
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM