Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase UI Recyclerview OnClick不工作,已尝试所有操作。请不要重复这个问题_Android_Firebase_Android Recyclerview_Google Cloud Firestore_Firebaseui - Fatal编程技术网

Android Firebase UI Recyclerview OnClick不工作,已尝试所有操作。请不要重复这个问题

Android Firebase UI Recyclerview OnClick不工作,已尝试所有操作。请不要重复这个问题,android,firebase,android-recyclerview,google-cloud-firestore,firebaseui,Android,Firebase,Android Recyclerview,Google Cloud Firestore,Firebaseui,我正在尝试在我的Android应用程序中添加Firebase Recyclerview。当我添加时,所有的数据都是从Firestore正常获取的,但是当涉及到处理onClick事件时,它根本不起作用 我遵循的事情: 添加了带有方法的接口 在my TipActivity.java中实现的接口 代码如下: TipActivity.java 导入androidx.appcompat.app.appcompat活动; 导入androidx.paging.PagedList; 导入androidx.r

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

我遵循的事情:
  • 添加了带有方法的接口
  • 在my TipActivity.java中实现的接口
代码如下:

TipActivity.java
导入androidx.appcompat.app.appcompat活动;
导入androidx.paging.PagedList;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入android.os.Bundle;
导入android.widget.Toast;
导入android.util.Log;
导入com.firebase.ui.firestore.paging.FirestorePagingOptions;
导入com.google.firebase.firestore.FirebaseFirestore;
导入com.google.firebase.firestore.Query;
公共类TipActivity扩展AppCompative实现FireStoreTipAdapter.OnListItemClick{
FirestoreTipsAdapter FirestoreTipsAdapter;
FirebaseFirestore FirebaseFirestore;
回收视图回收视图;
@凌驾
创建时受保护的void(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 FirestorePagingOptions=新建FirestorePagingOptions.Builder()
.setLifecycleOwner(此)
.setQuery(查询、配置、TipsModel.class)
.build();
FireStoreTipAdapter=新的FireStoreTipAdapter(firestorePagingOptions,this,this);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
recyclerView.setAdapter(FireStoreTipAdapter);
}
@凌驾
公共空间(mclick)(){
Toast.makeText(这是“Show up bruh!”,Toast.LENGTH_SHORT.Show();
Log.d(“至少”,“你应该工作”);
}
}
下面是我的:

FireStoreTipAdapter.java
package com.mycompany.company;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入android.widget.Toast;
导入androidx.annotation.NonNull;
导入androidx.recyclerview.widget.recyclerview;
导入com.firebase.ui.firestore.paging.FirestorePagingAdapter;
导入com.firebase.ui.firestore.paging.FirestorePagingOptions;
公共类FireStoreTipAdapter扩展FirestorePagingAdapter{
仅限专用项单击仅限专用项单击;
语境;
公共FireStoreTipAdapter(@NonNull FirestorePagingOptions,OnListItemClick OnListItemClick,上下文上下文){
超级(期权);
this.onListItemClick=onListItemClick;
this.context=上下文;
}
@凌驾
受保护的无效onBindViewHolder(@NonNull TipsViewHolder holder,int位置,@NonNull TipsModel模型){
holder.title.setText(model.getTitle());
holder.description.setText(model.getDescription());
}
@非空
@凌驾
公共TipsViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.list_项,parent,false);
返回新的TipsViewHolder(视图);
}
公共类TipsViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
文本视图标题、描述;
公共TipsViewHolder(@NonNull View itemView){
超级(项目视图);
title=itemView.findviewbyd(R.id.list\u title);
description=itemView.findviewbyd(R.id.list\u desc);
itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(上下文,“你在工作吗,兄弟?”,Toast.LENGTH_SHORT.show();
}
});
}
@凌驾
公共void onClick(视图v){
onListItemClick.onItemClick();
}
}
仅限公共界面列表项单击{
void onite mclick();
}
}
下面是list_item.xml的代码


请帮忙。我遵循了堆栈溢出的所有其他答案。

在给定的设置中,
OnClickListener
正在
视图持有者的
项目视图
上设置,这将是其布局中的根
视图
。但是,在
LinearLayout
上设置的
clickable
focusable
属性会导致它首先抓取触摸事件,因此它基本上是在
CardView
处理它们以响应点击之前拦截它们。但是,
线性布局上没有侦听器,因此什么也没有发生

假设您希望整个项目
视图
可单击,只需从
中删除
android:clickable=“true”
android:focusable=“true”
属性即可。如果没有
可点击的子项
可聚焦的子项
,则
CardView
将注册点击


相反,如果您可能只希望某个子项可单击,例如
LinearLayout
,那么您可以在该子项上设置
OnClickListener
,而不是整个
CardView
。但是,如果要成为唯一可单击的子对象或孙子对象,您仍然不需要这些属性。这些属性在基本的、相对平坦的布局中通常是不必要的,比如列表项的布局。

你的意思是你甚至没有在
OnClickListener中看到
Toast
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");
}
}
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();
    }
}
<?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>