是否可以使用水平和垂直recyclerview遍历Firebase数据?

时间:2019-10-30 15:39:01

标签: android firebase android-recyclerview horizontal-scrolling vertical-scrolling

我在firebase中有此数据:

screenshot of the firebase data

我已经在单个子类中循环了数据,但是我想使用水平recyclerview来处理所有子类,使用垂直recyclerview来遍历所有数据来循环所有子类。我能够执行此操作,但只能手动执行,对所有子类都使用recyclerview。我想知道是否有可能使流程自动化,而不必每次我想要新的recylerview时都这样做。

   first_recycler_view = (RecyclerView) view.findViewById(R.id.first_recycler_view);
    first_recycler_view.setNestedScrollingEnabled(false);
    first_recycler_view.setHasFixedSize(false);

    first_recycler_view.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));

    database = FirebaseDatabase.getInstance();
    final DatabaseReference reference = database.getReference().child("festivals");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            list = new ArrayList<Profile>();
            for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {
                Profile p = dataSnapshot1.getValue(Profile.class);
                list.add(p);
            }
            adapter = new MyAdapter(getContext().getApplicationContext(), list);
            first_recycler_view.setAdapter(adapter);
            rvid = 1;

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(getContext(), "Opsss.... Something is wrong", Toast.LENGTH_SHORT).show();
        }

    });


    second_recycler_view = (RecyclerView) view.findViewById(R.id.second_recycler_view);
    second_recycler_view.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));

    database = FirebaseDatabase.getInstance();
    final DatabaseReference reference1 = database.getReference().child("categories");
    reference1.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            list = new ArrayList<Profile>();
            for (DataSnapshot dataSnapshot2 : dataSnapshot.getChildren()) {
                Profile p = dataSnapshot2.getValue(Profile.class);
                list.add(p);
            }
            adapter = new MyAdapter(getContext(), list);
            second_recycler_view.setAdapter(adapter);
            rvid = 2;
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(getContext(), "Opsss.... Something is wrong", Toast.LENGTH_SHORT).show();
        }


    });

是否有可能一次获得所有Firebase数据,而不必每次我想要一个新的recyclerview时都必须编写相同的代码。我项目中的实际数据很大,因此自动化该过程将很有帮助。

这是我的适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

Context context;
ArrayList<Profile> profiles;
public View view;


public MyAdapter(Context c , ArrayList<Profile> p)
{
    context = c;
    profiles = p;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_movie, parent, false);
    return new MyViewHolder(v);
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.title.setText(profiles.get(position).getName());

    Picasso.get().load(profiles.get(position).getImage()).into(holder.profilePic);


}


@Override
public int getItemCount() {
    return profiles.size();
}

class MyViewHolder extends RecyclerView.ViewHolder
{
    TextView title;
    ImageView profilePic;

    public MyViewHolder(View itemView) {
        super(itemView);
        view = itemView;

    if(HomeFragment.rvid == 1) {
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(context, Festival.class);
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                i.putExtra("Name", title.getText());
                context.startActivity(i);

            }
        });
    } else if (HomeFragment.rvid == 3 ) {
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(context, Places.class);
                i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                i.putExtra("Name", title.getText());
                context.startActivity(i);

            }
        });

    }

        title = (TextView) itemView.findViewById(R.id.movietitle);

        profilePic = (ImageView) itemView.findViewById(R.id.thumbnail);

    }

}

0 个答案:

没有答案
相关问题