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

标签 android firebase android-recyclerview google-cloud-firestore firebaseui

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

我遵循的事情:

  • 添加了与方法的接口(interface)。
  • 在我的 TipsActivity.java 中实现接口(interface)

  • 这是代码:

    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>
    

    注意:我能够从 Firestore 获取数据,它可以正确显示数据。
    enter image description here
    请帮忙。我遵循了 Stack Overflow 的所有其他答案。

    最佳答案

    在给定的设置中,OnClickListener正在设置 ViewHolderitemView ,这将是根 View在其布局中,即 CardView .但是,clickablefocusable LinearLayout 上设置的属性导致它首先抓取触摸事件,因此它基本上在 CardView 之前拦截它们将处理它们以响应点击。 LinearLayout 上没有监听器,但是,所以什么也没有发生。

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

    相反,如果您可能只希望某个子项可点击——例如,LinearLayout – 然后您将设置 OnClickListener在那个 child 身上,而不是整个CardView .但是,如果这是唯一可点击的子或孙子,您仍然不需要这些属性。这些属性在基本的、相对扁平的布局中通常不是必需的,例如列表项。

    关于android - Firebase UI Recyclerview OnClick 不工作,尝试了一切。这不是一个重复的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62367910/

    相关文章:

    java - Android Activity finish 方法杀死应用程序

    java - 为什么在没有请求的情况下授予 WRITE_CONTACTS 权限?

    android - 如何在 Android Studio 中更改 Firebase 引用的 firebase URL?

    android - 应用未打开时显示抬头通知

    Firebase 服务无法正常工作

    android - RecyclerView 项目大小变化时跳转

    android - 在 NetworkImageview Volley android 中加载不同的离线图像(默认图像)

    android - Appmobi 应用程序可在 Wifi 上运行,但在 3g 上出现黑屏

    java - android 中的数组越界异常

    java - 具有多种 View 类型的 RecyclerAdapter 中的 IndexOutOfBoundsException