繁体   English   中英

如何在我的 recyclerview 中使用 cardview 设置 onclick 侦听器,并在单击 recyclerview 时从 firebase 数据库中检索数据?

[英]How can I set onclick listener in my recyclerview with cardview and retreive the data from firebase database when i click the recyclerview?

我有一个名为 Categories(车辆类别)的活动,它从 firebase(例如汽车、摩托车)中检索数据,并且布局由 recyclerview 和 cardview 组成。 我想要发生的是,当我单击其中一个类别时,我想将该所选类别的列表检索到下一个活动。 我的问题是,我不知道如何实现 onclick 监听器。 这是我的 CategoryActivty 的代码:

公共 class CategoryActivity 扩展 AppCompatActivity {

DatabaseReference reference;
RecyclerView recyclerView;
ArrayList<Categories> list;
MyAdapter adapter;

BottomNavigationView bottomNavigationView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    recyclerView = (RecyclerView) findViewById(R.id.myRecycler);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    list = new ArrayList<Categories>();

    reference = FirebaseDatabase.getInstance().getReference().child("Categories");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot dataSnapshot:snapshot.getChildren())
            {
                Categories c= dataSnapshot.getValue(Categories.class);
                list.add(c);
            }
            adapter = new MyAdapter(CategoryActivity.this,list);
            recyclerView.setAdapter(adapter);

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });




    bottomNavigationView = findViewById(R.id.bottomNav);
    bottomNavigationView.setSelectedItemId(R.id.home);

    bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

            switch (menuItem.getItemId())
            {
                case R.id.home:
                    break;

                case R.id.notifications:
                    Intent intent1 = new Intent(HomeActivity.this,NotificationActivity.class);
                    startActivity(intent1);
                    break;

                case R.id.info:
                    Intent intent2 = new Intent(HomeActivity.this,AboutActivity.class);
                    startActivity(intent2);
                    break;
            }
            return false;
        }
    });
}

}

This is for the Categories.java

公共 class 类别 {

String name, image;

public Categories() {
}

public Categories(String name, String image) {
    this.name = name;
    this.image = image;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getImage() {
    return image;
}

public void setImage(String image) {
    this.image = image;
}

}

这是针对适配器的:

公共 class MyAdapter 扩展 RecyclerView.Adapter<MyAdapter.MyViewHolder> {

Context context;
ArrayList <Categories> list;

public MyAdapter (Context c, ArrayList <Categories> l)
{
    context = c;
    list = l;
}


@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.cardview1,parent,false));
}

@Override
public void onBindViewHolder(@NonNull MyAdapter.MyViewHolder holder, int position) {
    holder.name.setText(list.get(position).getName());
    Picasso.get().load(list.get(position).getImage()).into(holder.image);

}

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

公共 static class MyViewHolder 扩展 RecyclerView.ViewHolder {

    TextView name;
    ImageView image;
   public MyViewHolder(@NonNull View itemView) {
       super(itemView);

       name = (TextView) itemView.findViewById(R.id.categoryName);
       image = (ImageView) itemView.findViewById(R.id.image1);

   }

} }

请帮助我,这是我第一次使用 android 工作室

简单的方法是在 onBindViewHolder 中添加 onClickListener

holder.itemView.setOnClickListener {
            // call listener or just start required activity with data
        }

因为您不能将非普通类型 object 发送到 Activity,所以您必须实现 Parcelable 中的类别,然后使用 intent.putExtra()。

暂无
暂无

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM