如何在 Firebase recyclerview 加载时添加进度条

how to add progress bar on loading in Firebase recyclerview

我正在构建一个应用程序,它使用 firebase 回收器适配器从 firebase 获取数据我需要在该回收器视图中实现进度。

我无法了解如何一次加载特定数量的数据,例如加载 3 个项目并显示进度条,然后加载其他项目。 并在开始时加载项目时显示进度条

这是获取数据的代码

final ProgressBar p1=(ProgressBar)rootView.findViewById(R.id.StreetRecyclerProgress);
                final LinearLayout likeLayout=(LinearLayout)rootView.findViewById(R.id.Likee);
                MainArea.viewPager.setBackgroundResource(R.drawable.grey_background);
                myRef1 = FirebaseDatabase.getInstance().getReference().child("Video_Upload").child("Street");
                myRef1.keepSynced(true);
                myRef1.orderByKey();
                rView = (RecyclerView) rootView.findViewById(R.id.StreetRecyclerView);
                rView.hasFixedSize();
                LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()) {

                    @Override
                    public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state, int position) {
                        LinearSmoothScroller smoothScroller = new LinearSmoothScroller(getActivity()) {

                            private static final float SPEED = 300f;// Change this value (default=25f)

                            @Override
                            protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
                                return SPEED / displayMetrics.densityDpi;
                            }

                        };
                        smoothScroller.setTargetPosition(position);
                        startSmoothScroll(smoothScroller);
                    }

                };
                rView.setLayoutManager(layoutManager);
                FBRA = new FirebaseRecyclerAdapter<StreetDataFetcher, Street_food.StreetViewHolder>(
                        StreetDataFetcher.class,
                        R.layout.card_recycler_view,
                        Street_food.StreetViewHolder.class,
                        myRef1
                ) {
                    @Override
                    protected void populateViewHolder( Street_food.StreetViewHolder viewHolder, StreetDataFetcher model, final int position ) {
                        //p1.setVisibility(View.INVISIBLE);
                        viewHolder.setTitle(model.getVideoName());
                        viewHolder.setShortDesc(model.getShort_Desc());
                        viewHolder.setUsername(model.getUserName());
                        viewHolder.setDate(model.getDateTime());
                        viewHolder.setVideoPath(model.getVideoPath());
                        viewHolder.setProfile(model.getProfileImage());
                        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick( View v ) {
                                final String mref;
                                mref=FBRA.getRef(position).getKey().toString().trim();
                                //Toast.makeText(getActivity(),mref.toString(),Toast.LENGTH_SHORT).show();
                                 Intent i=new Intent(getActivity(),StreetVideoView.class);
                                i.putExtra("position",mref);
                                startActivity(i);

                            }
                        });
                        viewHolder.itemView.findViewById(R.id.Likee).setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick( View v ) {
                                ImageView a;
                                a=(ImageView)v.findViewById(R.id.likeImage);
                                a.setImageResource(R.drawable.ic_heart_on);
                                final String mref;
                                mref=FBRA.getRef(position).getKey().toString().trim();
                                final DatabaseReference myyRef=FirebaseDatabase.getInstance().getReference().child("Video_Upload").child("Street").child(mref).child("Likes");
                                myyRef.addListenerForSingleValueEvent(new ValueEventListener() {
                                    @Override
                                    public void onDataChange( DataSnapshot dataSnapshot ) {
                                        Integer i=Integer.valueOf(dataSnapshot.getValue().toString());
                                        int ii=i+1;
                                        String like_value= String.valueOf(ii);
                                        myyRef.setValue(like_value);
                                    }

                                    @Override
                                    public void onCancelled( DatabaseError databaseError ) {

                                    }
                                });
                            }
                        });
                    }
                };

                rView.setAdapter(FBRA);
                

我在此代码中需要的是进度条应该在回收器视图获取/加载数据时显示

将进度条可见性设置为 VISIBLE 和 INVISIBLE 即可。我在这样的片段中完成了这个

public void onDataChange(DataSnapshot dataSnapshot) {
        DiseaseFragment.show_progress();

                if (dataSnapshot.getChildrenCount() > 0) {
                    DiseaseFragment.Hide_no_content_message();
        DiseaseFragment.hide_progress();
                    // data is found
                }
                else{

                   /* If no data found do this */
                    new Handler().postDelayed(new Runnable() {
                                                  @Override
                                                  public void run() {
                                                      DiseaseFragment.hide_progress();

                                                  }
                                              },3000);}}

已调用静态函数将进度条的可见性设置为 VISIBLE/INVISIBLE。 其中 3000 是等于 3 秒的毫秒,如果没有找到数据,请等待 3 秒并隐藏进度条

在您的主片段中,您可以使用静态方法,例如,

 public static void enableThem() {
             mProgressBar.setVisibility(View.VISIBLE);
             mTextNoPost.setVisibility(View.VISIBLE);
    }

    public static void disableThem() {
        mProgressBar.setVisibility(View.INVISIBLE);
        mTextNoPost.setVisibility(View.INVISIBLE);
    }

在您的回收器适配器中,您可以覆盖 onDataChanged() 方法并添加实例化它。

@Override
    public void onDataChanged() {
        super.onDataChanged();
        MainFragment.disableThem();
    }