首页 文章

如何将firebase数据加载到recyclerview中

提问于
浏览
1

我正在寻求有关如何将存储在Firebase数据库中的数据加载到 recyclerview 的帮助 .

下面的屏幕截图显示了加载到 recyclerview 时我希望如何构建数据 .

我可以使用 addEventListener 访问来自各个路径的数据,例如"Upcoming/Events/03/23",但无法以上述格式动态加载到 recyclerview .

请参阅下面的代码我在下面加载不同节点下的子项,但我可以将其加载到 recyclerview

private ListView mUserList;
private ArrayList<String> mUpcomingList = new ArrayList<>();

final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,mUpcomingList);
mUserList.setAdapter(arrayAdapter);

String CurrentString = date.toString().trim();
StringTokenizer tokens = new StringTokenizer(CurrentString, "/");
String first = tokens.nextToken();
String second = tokens.nextToken();
mDatabase = FirebaseDatabase.getInstance().getReference().child("Upcoming/Events").child(first);
mDatabase.addValueEventListener(new ValueEventListener() {

@Override
Public void onDataChange(DataSnapshot dataSnapshot) {

Log.d(TAG,"Listing children");

for (DataSnapshot child: dataSnapshot.getChildren()) {


mUpcomingList.add(child.getKey());
arrayAdapter.notifyDataSetChanged();
}

感谢您的帮助 .

2 回答

  • 0

    你必须使用 FirebaseRecyclerAdapter ,as

    FirebaseRecyclerAdapter<Model, ViewHolder> Adapter = new FirebaseRecyclerAdapter<Model, ViewHolder>(
                Model.class,  //Name of model class
                R.layout.row, //Row layout to show data
                viewHolder.class, //Name of viewholder class
                mDatabaseRef // Database Refernce
        ) {
            @Override
            protected void populateViewHolder(VieHolder viewHolder, Model model, int position) {
    
    //Your Method to load Data
    
          }
        };
     RecyclerView.setAdapter(Adapter);
    

    为此,您必须创建另外两个类,一个是视图持有者(显示数据),另一个是模型类(指的是从中获取数据的节点的名称) .

  • 0

    当您使用时,您可以创建recyclerview adatper并将此适配器绑定到Recycler视图中 . 使用下面的代码显示firebase的所有数据,并根据您的需要进行更改并进行更改 .

    RecyclerView适配器::

    public class DisplayAllData extends RecyclerView.Adapter<DisplayAllData.ItemViewHolder>{
    private  List<User> mUserLsit=new ArrayList<>();
    private Context mContext;
    
    @Override
    public ItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false);
        return new ItemViewHolder(view);
    }
    
    public DisplayAllData(Context mContext,List<User> mUserLsit) {
        this.mContext=mContext;
        this.mUserLsit = mUserLsit;
    }
    
    @Override
    public void onBindViewHolder(ItemViewHolder holder, int position) {
        User user=mUserLsit.get(position);
        holder.mTvName.setText(user.name);
        holder.mTvEmail.setText(user.email);
        holder.mTvPwd.setText(user.pwd);
    }
    
    @Override
    public int getItemCount() {
        return mUserLsit.size();
    }
    
    public class ItemViewHolder extends RecyclerView.ViewHolder {
        TextView mTvName,mTvEmail,mTvPwd;
        public ItemViewHolder(View itemView) {
            super(itemView);
            mTvEmail=itemView.findViewById(R.id.rlTvEmail);
            mTvName=itemView.findViewById(R.id.rlTvName);
            mTvPwd=itemView.findViewById(R.id.rlTvPwd);
    
        }
    }
    

    }

    在适配器中采用简单的布局,并进行三个textview控件并将数据绑定到其中 . 然后采取活动布局并在xml中定义回收站视图 . 然后使用下面的代码来读取firebase数据库记录并显示recyclerview .

    public class DisplayActivity extends AppCompatActivity {
    private RecyclerView mRvData;
    private DisplayAllData allDataAdapter;
    private DatabaseReference mDatabase;
    private TextView mTvEmpty;
    private FirebaseDatabase mFirebaseInstance;
    private List<User> mUserList = new ArrayList<>();
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.display_data);
        initView();
    }
    
    private void initView() {
        mFirebaseInstance = FirebaseDatabase.getInstance();
        mDatabase = mFirebaseInstance.getReference("usersDb/UserTable");
        mRvData = findViewById(R.id.rvData);
        mTvEmpty = findViewById(R.id.dlTvEmpty);
        mRvData.setLayoutManager(new LinearLayoutManager(this));
        mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                mUserList.clear();
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                    User user = dataSnapshot1.getValue(User.class);
                    mUserList.add(user);
                }
                allDataAdapter = new DisplayAllData(DisplayActivity.this, mUserList);
                mRvData.setAdapter(allDataAdapter);
                allDataAdapter.notifyDataSetChanged();
                if (mUserList.isEmpty())
                    mTvEmpty.setVisibility(View.VISIBLE);
                else
                    mTvEmpty.setVisibility(View.GONE);
            }
    
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
        });
    }
    

    }

相关问题