如何使用 cardview 在我的 recyclerview 中设置 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?
我有一个 activity 命名的类别(车辆类别),它从 firebase(例如汽车、摩托车)中检索数据,布局由 recyclerview 和 cardview 组成。我想要发生的是,当我单击其中一个类别时,我想将该所选类别的列表检索到下一个 activity。我的问题是,我不知道如何实现 onclick 侦听器。
这是我的 CategoryActivty 的代码:
public 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
public 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;
}
}
这是给适配器的:
public class MyAdapter 扩展 RecyclerView.Adapter {
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();
}
public 静态 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 studio
简单的方法是在 onBindViewHolder 中添加 onClickListener
holder.itemView.setOnClickListener {
// call listener or just start required activity with data
}
因为您不能将非普通类型的对象发送到 Activity,所以您必须从 Parcelable 实现类别,然后使用 intent.putExtra()。
我有一个 activity 命名的类别(车辆类别),它从 firebase(例如汽车、摩托车)中检索数据,布局由 recyclerview 和 cardview 组成。我想要发生的是,当我单击其中一个类别时,我想将该所选类别的列表检索到下一个 activity。我的问题是,我不知道如何实现 onclick 侦听器。 这是我的 CategoryActivty 的代码:
public 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
public 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;
}
}
这是给适配器的:
public class MyAdapter 扩展 RecyclerView.Adapter
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();
}
public 静态 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 studio
简单的方法是在 onBindViewHolder 中添加 onClickListener
holder.itemView.setOnClickListener {
// call listener or just start required activity with data
}
因为您不能将非普通类型的对象发送到 Activity,所以您必须从 Parcelable 实现类别,然后使用 intent.putExtra()。