android - 如何在 Firebase 回收器适配器中实现 recyclerview ItemClickListener()?
问题描述
我在YouTube 上遵循了本教程。
我设法搜索数据,但现在我想在回收站视图上打开所选数据的详细信息页面。我该如何完成?我应该在哪个部分实施onClickListener
for recyclerview?我尝试onClickListener
在 OnBindViewHolder 和 SetDetails 方法中添加 ,intent put extra ... ,但它们都无法识别我的上下文。
这是我当前的代码:
private void firebaseIngredientSearch(String searchIngredient) {
Toast.makeText(SearchActivity.this, "Started Search", Toast.LENGTH_LONG).show();
Query firebaseSearchQuery = databaseReference.orderByChild("ingName").startAt(searchIngredient).endAt(searchIngredient + "\uf8ff");
FirebaseRecyclerOptions<Ingredients> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<Ingredients>()
.setQuery(firebaseSearchQuery, Ingredients.class)
.build();
FirebaseRecyclerAdapter<Ingredients, SearchActivity.IngredientsViewHolder> firebaseRecyclerAdapter = new
FirebaseRecyclerAdapter<Ingredients, SearchActivity.IngredientsViewHolder>(firebaseRecyclerOptions) {
@Override
protected void onBindViewHolder(@NonNull IngredientsViewHolder holder, int position, @NonNull final Ingredients model) {
holder.setDetails(model.getIngName(), model.getIngStatus(),model.getIngCategory(),model.getIngCategory());
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent goDetail = new Intent(, IngredientSearchDetailsActivity.class);
goDetail.putExtra("ingName", model.getIngName());
goDetail.putExtra("ingStatus", model.getIngStatus());
goDetail.putExtra("ingCategory", model.getIngCategory());
goDetail.putExtra("ingDescription", model.getIngDescription());
mActivity.startActivity(goDetail);
}
});
}
@NonNull
@Override
public IngredientsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_searched_ingredient, parent, false);
return new IngredientsViewHolder(view);
}
};
firebaseRecyclerAdapter.startListening();
rvSearchResult.setAdapter(firebaseRecyclerAdapter);
}
///////////////////////////////////////// //////////////////////////
public static class IngredientsViewHolder extends RecyclerView.ViewHolder {
View view;
public IngredientsViewHolder(@androidx.annotation.NonNull View itemView) {
super(itemView);
view = itemView;
}
public void setDetails(String ingName, String ingStatus, String ingCategory, String ingDescription) {
TextView i_Name = view.findViewById(R.id.tvName);
TextView i_Status = view.findViewById(R.id.tvStatus);
TextView i_Category = view.findViewById(R.id.tvCategory);
TextView i_Description = view.findViewById(R.id.tvDescription);
ImageView iv_Status = view.findViewById(R.id.searchStatusIv);
i_Name.setText(ingName);
i_Status.setText(ingStatus);
i_Category.setText(ingCategory);
i_Description.setText(ingDescription);
}
}
解决方案
用户holder.view.setOnClickListener
发起OnClickListener
和使用holder.view.getContext()
,而不是mActivity
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent goDetail = new Intent(, IngredientSearchDetailsActivity.class);
goDetail.putExtra("ingName", model.getIngName());
goDetail.putExtra("ingStatus", model.getIngStatus());
goDetail.putExtra("ingCategory", model.getIngCategory());
goDetail.putExtra("ingDescription", model.getIngDescription());
holder.view.getContext().startActivity(goDetail);
}
});
推荐阅读
- javascript - 使用切片和展开运算符后,使用 Number 将字符串转换为数组副本中的数字
- virtual-machine - VMWare 工作站:使用虚拟路由器 ping 不同子网上的外部托管虚拟机
- c - 删除队列后显示队列的数据
- .net - API 授权找不到用户的 AD 组
- r - 字符的开始和结束位置;R
- google-bigquery - BigQuery approx_quantiles WHERE,对不同的函数使用不同的 WHERE
- next.js - Stylelint 不在 Next.js 中检查 component.module.scss
- git - 使用 SSH 克隆 BitBucket 存储库时出现问题
- r - 使用 sparklyr::spark_read_jdbc 从 Kerberized Impala 数据库读取数据时出错
- javascript - 部署我的功能时出现firebase错误