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

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

我正在尝试使用 FirestoreRecyclerAdapter 获取所有文档,如果有 7 个文档,RecyclerView 项目成功填充了 7 个项目,但这里的问题是这些项目有 TextView 未填充文档名称。请查看我的源代码:

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 fragment :

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。

关于java - Firestore 回收器适配器未获取文档名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54547103/

相关文章:

firebase - 如何禁用从 Firebase 控制台删除集合和文档

java - 表头未显示在 Java Swing 上

android - 如何从服务器缓存音频、视频和图像并保存在内存中?

java - 简单的 Java 现值计算器不工作

android - GooglePlay 表示设备不兼容,但开发者控制台将其显示为兼容

Android BLE 特性 setValue 无法写入正确的数据

firebase - flutter 从 Firebase 获取插入的 id

android - 从 Firebase 控制台中删除 Firebase 用户时(用户登录后),它不会反射(reflect)在应用程序中

java - Guava 函数 toByteArray() 返回 null?

java - 为什么我的对象被IntelliJ IDEA的调试器无声无息地改变了?