代码之家  ›  专栏  ›  技术社区  ›  Mr. Patel

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

  •  0
  • Mr. Patel  · 技术社区  · 7 年前

    我正在尝试使用 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;
        }
    
    
    }
    

    初始化recyclerview的TableList片段:

    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:

    <?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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Alex Mamo    7 年前

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

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

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