【问题标题】:How to implement recyclerview ItemClickListener() in Firebase recycler adapter?如何在 Firebase 回收器适配器中实现 recyclerview ItemClickListener()?
【发布时间】:2019-10-29 07:42:55
【问题描述】:

我在 YouTube 上学习了本教程。
我设法搜索数据,但现在我想在回收站视图上打开所选数据的详细信息页面。我该如何完成?我应该在哪个部分为 recyclerview 实现onClickListener?我尝试在 OnBindViewHolder 和 SetDetails 方法中添加 onClickListener,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.itemView.setOnClickListener
  • 我试过了,但是 Intent 有问题。它无法识别我的上下文
  • 然后使用holder.itemView.getContext()
  • 你能解释更多吗?我不明白。我已经尝试过您建议的代码,但它不起作用
  • 更新你的代码,无论你到目前为止做了什么,意图你遇到问题的地方,以便我可以检查

标签: android android-recyclerview onclicklistener


【解决方案1】:

用户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);
    }
});

【讨论】:

  • 这段代码很好,但它不会将数据带到下一页。你能帮忙吗?
  • IngredientSearchDetailsActivity 的 onCreate 中,您尝试过getIntent().getStringExtra("ingName"); 吗?
  • 输出是什么?
  • 好吧,我的错。数据加载有点慢。实际上一切都很好。上面的代码不需要做任何更改,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
相关资源
最近更新 更多