Firebase UI Recyclerview OnClick 不起作用,尝试了一切。这不是一个重复的问题

2024-01-29

我正在尝试在我的 Android 应用程序中添加 Firebase Recyclerview。当我添加时,所有数据都正常从 Firestore 获取,但是当涉及到处理 onClick 事件时,它根本不起作用。

我遵循的事情:

  • 添加了带有方法的接口。
  • 在我的 TipsActivity.java 中实现了接口

这是代码:

TipsActivity.java

import androidx.appcompat.app.AppCompatActivity;
import androidx.paging.PagedList;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;
import android.widget.Toast;

import android.util.Log;
import com.firebase.ui.firestore.paging.FirestorePagingOptions;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;



public class TipsActivity extends AppCompatActivity implements FirestoreTipsAdapter.OnListItemClick {

   FirestoreTipsAdapter firestoreTipsAdapter;
    FirebaseFirestore firebaseFirestore;
    RecyclerView recyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tips);

    firebaseFirestore = FirebaseFirestore.getInstance();
    recyclerView = findViewById(R.id.list);

    Query query = firebaseFirestore.collection("DailyTips").document("MyTips").collection("Tips");

    PagedList.Config config = new PagedList.Config.Builder()
            .setInitialLoadSizeHint(10)
            .setPageSize(5)
            .build();

    FirestorePagingOptions<TipsModel> firestorePagingOptions = new FirestorePagingOptions.Builder<TipsModel>()
            .setLifecycleOwner(this)
            .setQuery(query,config,TipsModel.class)
            .build();

    firestoreTipsAdapter = new FirestoreTipsAdapter(firestorePagingOptions,this,this);

       recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(firestoreTipsAdapter);


}

@Override
public void onItemClick() {
    Toast.makeText(this, "Show up bruh!", Toast.LENGTH_SHORT).show();
Log.d("AT_LEAST","You should work");
}
}

这是我的:

FirestoreTipsAdapter.java

package com.mycompany.company;


import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.firebase.ui.firestore.paging.FirestorePagingAdapter;
import com.firebase.ui.firestore.paging.FirestorePagingOptions;

public class FirestoreTipsAdapter extends FirestorePagingAdapter<TipsModel, FirestoreTipsAdapter.TipsViewHolder> {

    private OnListItemClick onListItemClick;
    Context context;

    public FirestoreTipsAdapter(@NonNull FirestorePagingOptions<TipsModel> options,OnListItemClick onListItemClick,Context context) {
        super(options);
        this.onListItemClick = onListItemClick;
        this.context = context;
    }

    @Override
    protected void onBindViewHolder(@NonNull TipsViewHolder holder, int position, @NonNull TipsModel model) {
        holder.title.setText(model.getTitle());
        holder.description.setText(model.getDescription());

    }

    @NonNull
    @Override
    public TipsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item,parent,false);
        return new TipsViewHolder(view);
    }

    public class TipsViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView title,description;


        public TipsViewHolder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.list_title);
            description = itemView.findViewById(R.id.list_desc);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(context, "Are you working bro?", Toast.LENGTH_SHORT).show();
                }
            });

        }

        @Override
        public void onClick(View v) {
            onListItemClick.onItemClick();
        }
    }
    public interface OnListItemClick{
        void onItemClick();
    }
}

这是list_item.xml的代码

<?xml version="1.0" encoding="utf-8"?>

<androidx.cardview.widget.CardView android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_margin="10dp"
    android:id="@+id/tipCardView"
    app:cardElevation="5dp"
    app:cardBackgroundColor="#E2E0EE"
    app:cardCornerRadius="5dp"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout
        android:id="@+id/list_root"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true"
        android:orientation="vertical"
        android:background="?attr/selectableItemBackground"
        android:padding="16dp">

    <TextView
        android:id="@+id/list_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Title"
        android:textColor="@android:color/black"
        android:textSize="16sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/list_desc"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:text="Description" />

    </LinearLayout>

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/curveshape"
        android:layout_gravity="end|bottom"
        android:layout_marginBottom="-30dp"
        android:alpha="0.2"
        />

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/tips"
        android:layout_gravity="end|bottom"
        android:layout_marginBottom="-10dp"
        android:layout_marginRight="25dp"
        android:alpha="0.2"
        />


</androidx.cardview.widget.CardView>

Note: I'm able to fetch data from Firestore, it is showing data properly. enter image description here Please help. I followed all other answers from Stack Overflow.


在给定的设置中,OnClickListener正在设置在ViewHolder's itemView,这将是根View在它的布局中,这是CardView。但是,那clickable and focusable上设置的属性LinearLayout导致它首先捕获触摸事件,所以它基本上是在触摸事件之前拦截它们CardView将处理它们以响应点击。没有听众LinearLayout,但是,所以什么也没有发生。

假设您想要整个项目View可点击,只需删除android:clickable="true" and android:focusable="true"属性来自于<LinearLayout>。没有clickable or focusable孩子们,CardView然后将最终注册点击。

相反,如果您可能只想要某个子项可点击 – 例如,LinearLayout– 然后你会设置OnClickListener那个孩子,而不是整个人CardView。不过,如果这是唯一可点击的子项或孙项,您仍然不需要在任何地方使用这些属性。这些属性在基本的、相对平坦的布局中通常不是必需的,例如列表项的布局。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase UI Recyclerview OnClick 不起作用,尝试了一切。这不是一个重复的问题 的相关文章

随机推荐

  • 将 React 组件从 Rails 引擎导入到应用程序中

    我在用反应在轨道上 https github com shakacode react on rails用于开发 Rails 引擎和应用程序 我写了一个 Rails 引擎 它只有一个组件 NewComponent 它使用react on ra
  • 浮点大于或小于零

    我有以下代码 有时返回 true 有时不返回 知道什么可能导致不同的结果吗 0 00 字符串来自 JSON 对象 代码简化 if new Float 0 00 gt 0 do something EDIT 我有一些浮点数 我想确定它是零 小
  • 尝试访问使用 CIFS 装载的远程文件夹在断开连接时挂起

    这个问题是一个扩展那个问题 https stackoverflow com questions 17929294 qdir hangs on accessing cifs remote folder when disconnected 再说
  • 如何在每个场景之前输出Cucumber后台步骤?

    通常 Cucumber 将输出后台步骤 使其看起来与您在功能文件中定义的相同 位于顶部 bundle exec cucumber color format pretty Feature Something Background Given
  • C# 获取 Windows 中每个显示器的 DPI 缩放比例

    我正在使用 WPF 应用程序中的代码 该应用程序需要计算 Windows 中每个显示器的 DPI 缩放大小 我能够计算出主屏幕的 DPI 但由于某种原因 我无法计算出如何获取其他显示器的比例 其他显示器都返回与主显示器相同的 DPI 有一些
  • 添加重试WebClient的所有请求

    我们有一个服务器来检索 OAUTH 令牌 并且 oauth 令牌通过 WebClient filter 方法添加到每个请求中 例如 webClient mutate filter request next gt tokenProvider
  • 验证 WCF Rest Web 服务

    我在 C 中创建了一个 Web 服务 REST Web 服务 无需任何身份验证 现在 我正在考虑向网络服务添加身份验证 Web服务公开了6个方法 都是GET 在这6个方法中 我想限制 Admin 组成员对2个方法的访问 目前 我的 Web
  • SQLAlchemy外键找不到表

    当我尝试实例化时出现此错误ConsumerAdvice class Foreign key associated with column tbConsumerAdvice ConsumerAdviceCategory ID could no
  • 有没有办法将 EditText/输入字段放入主屏幕小部件中?

    我希望我的用户在主屏幕上输入一些内容 但是每次我向小部件添加 Edittext 时 它都会中断 我做了一些谷歌搜索发现它们显然在小部件中不受支持 不过 每部 Android 手机上都有一个带有输入字段的 Google 搜索小部件 所以我想知
  • React-navigation-hooks:如何测试 useFocusEffect

    据我了解 应该这样做 以便 useFocusEffect 可以作为 useEffect 进行测试 模拟 我使用 useFocusEffect 来获取数据 useFocusEffect useCallback gt fetchData fet
  • 如何从gitlab中完全删除提交?

    我在 git 存储库中进行了提交并推送了它 但意外地它包含了我们生产机器的一些密码 所以我删除了提交 git reset hard HEAD 1 git push force 这确实从提交列表中删除了该提交 但 gitlab 上提交的 ur
  • 具有不同类型中断的状态循环

    我正在尝试将以下有状态命令式代码转换为 Haskell while true while get if put1 failImmediately if put2 succeedImmediately 这俩put1 and put2读取系统的
  • Java 泛型类型转换难题

    我正在尝试使用 Google 的 Guava ImmutableSet 类来创建一组具有类似时间属性的不可变类 java util Date 和 org joda time DateTime private static final Imm
  • 如何从 GDAX websocket feed 获取实时出价/要价/价格

    API 文档不鼓励轮询 ticker端点 建议使用websocket流来监听匹配消息 但匹配响应只提供了一个price and a side 卖买 如何从 websocket feed 重新创建股票行情数据 价格 卖价和出价 price 3
  • ffmpeg:如何在视频末尾添加帧或黑色?

    如何复制任何视频末尾最后一帧的任意数量的重复项 或者 如何在任何视频的末尾添加黑帧 这可以通过脚本和 ffmpeg 来完成吗 当然 只要操作可编写脚本 任何其他工具都可以 困难在于应该支持所有视频格式 或者至少尽可能广泛的视频格式 该脚本应
  • 在没有代理设置的情况下在 VSTS 中运行 nuget 任务

    所以我认为我想要的是这篇文章的反面 VSTS NuGet 恢复失败 代理 https stackoverflow com questions 45369334 vsts nuget restore fails proxy 我们有一台本地计算
  • 在Windows中设置JAVA_HOME?

    应该在哪里JAVA HOME指向 JDK 还是 JRE 我在几个网站上看到过 它设置为 JRE 而在其他情况下则设置为 JDK 它是否以任何方式依赖于 Java 版本 JDK代表Java开发工具包 而JRE代表Java运行时环境 JAVA
  • MySQL GROUP BY 行为

    给出下表 foo ID First Name Last Name 67 John Smith 67 Bill Jacobs What first name and last name下面的查询会返回 为什么 SELECT FROM foo
  • HTML 和 CSS:悬停时显示 div [重复]

    这个问题在这里已经有答案了 我试图得到它 以便当有人将鼠标悬停在 div 框上时 它会在其下方显示一个单独的 div 框 我该怎么做呢 HTML div div h1 Home h1 div div div div
  • Firebase UI Recyclerview OnClick 不起作用,尝试了一切。这不是一个重复的问题

    我正在尝试在我的 Android 应用程序中添加 Firebase Recyclerview 当我添加时 所有数据都正常从 Firestore 获取 但是当涉及到处理 onClick 事件时 它根本不起作用 我遵循的事情 添加了带有方法的接