Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.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 错误:类FirebaseRecyclerAdapter中的构造函数FirebaseRecyclerAdapter<;T、 VH>;无法应用于给定类型_Android_Firebase_Firebase Realtime Database_Android Recyclerview_Firebaseui - Fatal编程技术网

Android 错误:类FirebaseRecyclerAdapter中的构造函数FirebaseRecyclerAdapter<;T、 VH>;无法应用于给定类型

Android 错误:类FirebaseRecyclerAdapter中的构造函数FirebaseRecyclerAdapter<;T、 VH>;无法应用于给定类型,android,firebase,firebase-realtime-database,android-recyclerview,firebaseui,Android,Firebase,Firebase Realtime Database,Android Recyclerview,Firebaseui,我有使用Firebase的recyclerview的以下代码。回收器视图使用以下适配器 FirebaseRecyclerAdapter<DownloadList,DownloadListFragment.DownloadViewHolder> recyclerAdapter= new FirebaseRecyclerAdapter<DownloadList, DownloadViewHolder>( DownloadList.class,

我有使用Firebase的recyclerview的以下代码。回收器视图使用以下适配器

FirebaseRecyclerAdapter<DownloadList,DownloadListFragment.DownloadViewHolder> recyclerAdapter= new FirebaseRecyclerAdapter<DownloadList, DownloadViewHolder>(
            DownloadList.class,
            R.layout.download_cardview,
            DownloadViewHolder.class,
            databaseReference
    ) {
        @Override
        protected void populateViewHolder(DownloadViewHolder viewHolder, DownloadList model, int position) {
            viewHolder.setTitle(model.gettitle());
            //viewHolder.setImage(model.getimage());
            viewHolder.setDate(model.getDate());
        }


        @Override
        public DownloadViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            DownloadViewHolder viewHolder = super.onCreateViewHolder(parent, viewType);
            viewHolder.setOnClickListener(new DownloadViewHolder.ClickListener() {
                @Override
                public void onItemClick(View view, int position) {
                    Toast.makeText(getActivity(), "Item click at " + arrayAdapter.getItem(position), Toast.LENGTH_SHORT).show();

                    DownloadImageFragment fragment = new DownloadImageFragment();
                    Bundle arguments = new Bundle();
                    arguments.putString( "Batch" , batchID);
                    arguments.putString( "Type" , typeID);
                    arguments.putString( "Url", arrayAdapter.getItem(position));
                    arguments.putString( "Title", (String) titleAdapter.getItem(position));

                    fragment.setArguments(arguments);
                    final FragmentTransaction ft = getFragmentManager().beginTransaction();
                    ft.replace(R.id.content, fragment , "Download List");
                    ft.commit();

                }

                @Override
                public void onItemLongClick(View view, int position) {
                    return ;
                }
            });

            return viewHolder;
        }
    };

    recyclerView.setAdapter(recyclerAdapter);


    return view;
}

public static class DownloadViewHolder extends RecyclerView.ViewHolder {
    View mView;
    TextView textView_Title;
    TextView textView_Date;
    TextView textView_Image;

    String simage,stitle;

    private static Context context;

    public DownloadViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
        context = itemView.getContext();
        textView_Title = (TextView) itemView.findViewById(R.id.textView_download_title);
        textView_Image = (TextView) itemView.findViewById(R.id.textView_image_download);
        textView_Date = (TextView) itemView.findViewById(R.id.textView_download_date);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mClickListener.onItemClick(v, getAdapterPosition());

            }
        });
        itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                mClickListener.onItemLongClick(v, getAdapterPosition());
                return true;
            }
        });
    }
现在在构建apk时,会弹出以下错误

错误:类中的构造函数FirebaseRecyclerAdapter FirebaseRecyclerAdapter无法应用于给定类型; 必需:找到FirebaseRecyclerOptions: 类,int,类,数据库引用 原因:实际参数列表和形式参数列表的长度不同,其中T,VH 类型变量:T扩展类中声明的对象 FirebaseRecyclerAdapter VH扩展类中声明的ViewHolder 火基回收适配器

在android studio的3.1更新(2018年3月)之前,这是不存在的

我尝试过更改app:compatv7版本,但仍然不起作用

也根据提供的文件,它说要使用

Query query = FirebaseDatabase.getInstance()
    .getReference()
    .child("chats")
    .limitToLast(50);

FirebaseRecyclerOptions选项=
新的FirebaseRecyclerOptions.Builder()
.setQuery(查询,Chat.class)
.build();
现在我的问题是,因为我已经在应用程序的15个不同位置使用了上述recyclerView,所以我需要在所有15个位置更改它吗?还是有其他方法?另外,如果我使用query,新代码是否可以兼容


您可以实现自己的
FirebaseRecyclerAdapter
子类,将旧签名映射到新签名。比如:

class MyFirebaseRecyclerAdapter<T, VH extends RecyclerView.ViewHolder> :FirebaseRecyclerAdapter<T, VH> {
    public MyFirebaseRecyclerAdapter(Class pojoClass<T>, int layout, Class<VH> viewHolderClass, Query query) {            
        super(new FirebaseRecyclerOptions.Builder<T>()
            .setQuery(query, pojoClass.class)
            .build());
        ...
类MyFirebaseRecyclerAdapter:FirebaseRecyclerAdapter{
公共MyFirebaseRecyclerAdapter(类pojoClass、int layout、类viewHolderClass、查询){
super(新的FirebaseRecyclerOptions.Builder()
.setQuery(查询,pojoClass.class)
.build());
...
然后,您仍然需要更新所有位置以使用新的
MyFirebaseRecyclerAdapter
,但至少在此之后签名将兼容

FirebaseRecyclerOptions<Chat> options =
            new FirebaseRecyclerOptions.Builder<Chat>()
                    .setQuery(query, Chat.class)
                    .build();
class MyFirebaseRecyclerAdapter<T, VH extends RecyclerView.ViewHolder> :FirebaseRecyclerAdapter<T, VH> {
    public MyFirebaseRecyclerAdapter(Class pojoClass<T>, int layout, Class<VH> viewHolderClass, Query query) {            
        super(new FirebaseRecyclerOptions.Builder<T>()
            .setQuery(query, pojoClass.class)
            .build());
        ...