如何正确设置RecyclerView和数据库?

时间:2019-04-15 23:48:08

标签: android

我面临一个任务:我创建了一个数据库(它在下面的照片中),我想要在Android应用程序中使用RecycleView在应用程序中创建元素,即CardView,其中将有一个标题,照片,来自数据库的描述以及带有直接可绘制背景的按钮。如果不难,您可以解释如何实现。

我尝试了一堆手册,但没有找到类似的手册。

我当前的代码:

package com.ru.testonline;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;

import java.util.List;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    FirebaseFirestore db =FirebaseFirestore.getInstance();
    DocumentReference mMainRef =db.collection("Interface").document("Menu");

    RecyclerView rv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        rv = findViewById(R.id.rv);
        final LinearLayoutManager llm = new LinearLayoutManager(this);
        rv.setLayoutManager(llm);

        mMainRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                Log.d(TAG, "doc" + document);
                if (document.exists()) {
                    List<String> menu = (List<String>) document.get("Card_1");
                    Log.d(TAG, "Menu: " + menu.size());
                    if (menu.size() != 0) {

                    }
                }
            } else {
                Log.d(TAG, "get failed with ", task.getException());
            }
        }
    });


 }
}

2 个答案:

答案 0 :(得分:1)

我认为您正在使用FireStore。这很容易。

您需要遵循以下简单步骤 1.读取数据 2.添加到适配器列表 3.通知适配器列表已更改

这里是示例代码。

FirebaseFirestore db = FirebaseFirestore.getInstance();


db.collection("products").get()
        .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
            @Override
            public void onSuccess(QuerySnapshot queryDocumentSnapshots) {

                progressBar.setVisibility(View.GONE);

                if(!queryDocumentSnapshots.isEmpty()){

                    List<DocumentSnapshot> list = queryDocumentSnapshots.getDocuments();

                    for(DocumentSnapshot d : list){

                        Product p = d.toObject(Product.class);
                        productList.add(p); //adding read data to your list 

                    }

                    adapter.notifyDataSetChanged(); //notifying the adapter that list is changed

                }


            }
        });

如果您想逐步了解详细说明,可以观看以下视频: Firestore Android Tutorial - Reading Data

答案 1 :(得分:0)

您需要一个RecyclerView.Adapter来将所有项目放入其中,然后从那里为您的单元创建一个ViewHolder,在onCreateViewholder上充气并将视图链接到该Viewholder并在onBindViewholder上更新您的数据

然后在带有recyclerView的片段上,您需要使用标准CustomRecyclerViewAdapter适配器= new CustomerRecyclerViewAdapter(listOfItems)创建一次适配器,然后使用recyclerView.setAdapter(adapter)将适配器链接到您的recyclerView;