如何在 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();
}
我正在构建一个应用程序,它使用 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();
}