如何将firebase数据加载到recyclerview中

时间:2018-03-19 05:35:39

标签: android firebase firebase-realtime-database android-recyclerview

我正在寻求有关如何将存储在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();
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

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

RecyclerView Adapter ::

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);

    }
}

}

在适配器中采用简单的布局并进行三次t​​extview控制并将数据绑定到该文本中。 然后采取活动布局并在xml中定义recycleler视图。然后使用下面的代码来读取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) {

        }
    });
}

}

答案 1 :(得分:1)

您必须使用 FirebaseRecyclerAdapter , 如

 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);

为此你必须创建另外两个类,一个是viewholder(用于显示数据),另一个是用于获取数据的节点的名称。

答案 2 :(得分:0)

final DatabaseReference cartListRef = FirebaseDatabase.getInstance().getReference().child("Cart List");
        FirebaseRecyclerOptions<Cart> options = new FirebaseRecyclerOptions.Builder<Cart>()
                .setQuery(cartListRef.child("User View")
                        .child(Prevalent.currentOnlineUser.getPhoneNumber())
                        .child("Products"), Cart.class).build();

        FirebaseRecyclerAdapter<Cart, CartViewHolder> adapter =
                new FirebaseRecyclerAdapter<Cart, CartViewHolder>(options) {
                    @Override
                    protected void onBindViewHolder(@NonNull CartViewHolder holder, int position, @NonNull final Cart model) {

                        holder.txtProductQuantity.setText("Quantity = " + model.getQuantity());
                        holder.txtProductName.setText(model.getPname());
                        holder.txtProductPrice.setText("Price = " + model.getPrice() + "৳");

                        int oneTypeProductPrice = ((Integer.valueOf(model.getPrice()))) * Integer.valueOf(model.getQuantity());
                        overTotalPrices = overTotalPrices + oneTypeProductPrice;

                        holder.itemView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {

                                CharSequence options[] = new CharSequence[]
                                        {
                                                "Edit",
                                                "Remove"
                                        };

                                AlertDialog.Builder builder = new AlertDialog.Builder(CartActivity.this);
                                builder.setTitle("Cart Options");

                                builder.setItems(options, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int i) {

                                        if (i == 0){

                                            Intent intent = new Intent(CartActivity.this, ProductDetailsActivity.class);
                                            intent.putExtra("pid", model.getPid());
                                            startActivity(intent);
                                        }
                                        if (i == 1){

                                            cartListRef.child("User View")
                                                    .child(Prevalent.currentOnlineUser.getPhoneNumber())
                                                    .child("Products")
                                                    .child(model.getPid())
                                                    .removeValue()
                                                    .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                        @Override
                                                        public void onComplete(@NonNull Task<Void> task) {

                                                            if (task.isSuccessful()){

                                                                Toast.makeText(CartActivity.this,"Item removed successfully.",Toast.LENGTH_LONG).show();

                                                                Intent intent = new Intent(CartActivity.this, HomeActivity.class);
                                                                startActivity(intent);
                                                            }
                                                        }
                                                    });
                                        }
                                    }
                                });
                                builder.show();
                            }
                        });

                    }
                    @NonNull
                    @Override
                    public CartViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

                        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cart_items_layout, parent, false);
                        CartViewHolder holder = new CartViewHolder(view);
                        return holder;
                    }
                };

        recyclerView.setAdapter(adapter);
        adapter.startListening();
    }