Firestore回收器适配器无法获取文档名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firestore回收器适配器无法获取文档名称相关的知识,希望对你有一定的参考价值。

我正在尝试使用FirestoreRecyclerAdapter在这里获取所有文件,如果有7个文件,RecyclerView项目成功填充7项,但这里的问题是具有文本视图的项目没有填充文档名称。请看一下我的源代码:

FriendsResponse类:

@IgnoreExtraProperties
public class FriendsResponse {
     FirebaseFirestore db;
    public String getTable1() {
        return Table1;
    }

    public void setTable1(String table1) {
        Table1 = table1;
    }

    private String Table1;


    public FriendsResponse() {

    }

    public FriendsResponse(String Table1) {
        this.Table1 = Table1;
    }


}

TableList片段,其中初始化了recyclerview:

public class TableListFragment extends Fragment{

    private FirebaseFirestore db;
    private FirestoreRecyclerAdapter adapter;
    String documentnm;
    RecyclerView recyclerView;
    FloatingActionButton addt;
    private StaggeredGridLayoutManager _sGridLayoutManager;

    public static TableListFragment newInstance() {
        TableListFragment fragment = new TableListFragment();
        return fragment;
    }
    public TableListFragment() {

    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_tablelist, container, false);
        recyclerView = view.findViewById(R.id.rectab);
        addt=view.findViewById(R.id.addtab);
        init();
        getFriendList();
        addt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        return view;
    }
    private void init(){
        _sGridLayoutManager = new StaggeredGridLayoutManager(3,
                StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(_sGridLayoutManager);
        db = FirebaseFirestore.getInstance();
    }

    private void getFriendList(){
        Query query = db.collection("Order");

        FirestoreRecyclerOptions<FriendsResponse> response = new FirestoreRecyclerOptions.Builder<FriendsResponse>()
                .setQuery(query, FriendsResponse.class)
                .build();

        adapter = new FirestoreRecyclerAdapter<FriendsResponse, FriendsHolder>(response) {
            @Override
            public void onBindViewHolder(FriendsHolder holder, int position, FriendsResponse model) {


                holder.exname.setText(model.getTable1());


                holder.itemView.setOnClickListener(v -> {
                    Snackbar.make(recyclerView, model.getTable1(), Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                });
            }

            @Override
            public FriendsHolder onCreateViewHolder(ViewGroup group, int i) {
                View view = LayoutInflater.from(group.getContext())
                        .inflate(R.layout.list_item, group, false);

                return new FriendsHolder(view);
            }

            @Override
            public void onError(FirebaseFirestoreException e) {
                Log.e("error", e.getMessage());
            }
        };

        adapter.notifyDataSetChanged();
        recyclerView.setAdapter(adapter);
    }
    public class FriendsHolder extends RecyclerView.ViewHolder {

        TextView exname;


        public FriendsHolder(View itemView) {
            super(itemView);
            exname= itemView.findViewById(R.id.topicname);

        }
    }

    @Override
    public void onStart() {
        super.onStart();
        adapter.startListening();
    }

    @Override
    public void onStop() {
        super.onStop();
        adapter.stopListening();
    }



    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

}

Screenshot of the Screen:

这是list_item的代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView android:id="@+id/cardvw"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardCornerRadius="6dp"
    card_view:cardElevation="3dp"
    card_view:cardUseCompatPadding="true"
    xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto">
    <LinearLayout android:orientation="vertical" android:padding="5dp" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dp">
        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/topiclogo"
            android:layout_width="match_parent"
            android:layout_gravity="center"
            android:src="@drawable/table"
            android:layout_height="wrap_content"
            />
        <TextView android:textSize="15sp"
            android:textStyle="bold"
            android:textAlignment="center"
            android:textColor="#ffffa200"
            android:id="@+id/topicname"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
</android.support.v7.widget.CardView>

Screenshot of database

答案

据我了解,您希望将文档的ID设置为TextView。因此,因为这些名称实际上是文档ID,所以您应该在onBindViewHolder()方法中使用以下代码行:

String id = getSnapshots().getSnapshot(position).getId();
holder.exname.setText(id);

在获取文档的属性时,您使用的POJO类非常有用,而不是获取文档ID。

以上是关于Firestore回收器适配器无法获取文档名称的主要内容,如果未能解决你的问题,请参考以下文章

Recycler View Android中的Firestore数据[重复]

将我的应用程序发布到 google playstore 后,我的应用程序无法获取 firestore 数据以回收分页视图

使用回收器适配器获取空指针

无法从 Firebase(Cloud Firestore 数据库)获取数据

我无法在 Firebase 中获得孩子的钥匙

Firestore如何在回收站视图中从firestore检索数据