I had used this code to cache information locally for firebase recyclerview data
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
But, even though i had made some changes in the data stored in firebase database. It is not being reflected in the recyclerview. I want to delete persistence memory in onDestroy. So, that next time when the app is opended data is fetched from server. UI is similar to playstore ui. Horizontal recyclerviews is added inside of a vertical recyclerview
Updated Code:
//Method for retrieval of firebase database and displaying in recyclerview
private void getFirebaseData() {
//dialog.show();
shimmerFrameLayout.startShimmer();
myData.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
List<ItemGroup> itemGroups = new ArrayList<>();
for(DataSnapshot groupSnapshot:dataSnapshot.getChildren()){
ItemGroup itemGroup = new ItemGroup();
try {
itemGroup.setHeaderTitle(groupSnapshot.child("headerTitle").getValue(true).toString());
}catch (NullPointerException e){
Log.e("null",""+e);
}
GenericTypeIndicator<ArrayList<ItemData>> genericTypeIndicator = new GenericTypeIndicator<ArrayList<ItemData>>(){};
itemGroup.setListItem(groupSnapshot.child("listItem").getValue(genericTypeIndicator));
itemGroups.add(itemGroup);
}
ifirebaseLoadListener.onFirebaseLoadSuccess(itemGroups);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
ifirebaseLoadListener.onFirebaseLoadFailed(databaseError.getMessage());
}
});
}
@Override
public void onFirebaseLoadSuccess(List<ItemGroup> itemGroupList) {
MyItemGroupAdapter adapter = new MyItemGroupAdapter(getActivity(), itemGroupList);
my_recycler_view.setAdapter(adapter);
shimmerFrameLayout.stopShimmer();
shimmerFrameLayout.setVisibility(View.GONE);
//dialog.dismiss();
}
@Override
public void onFirebaseLoadFailed(String message) {
Toast.makeText(getContext(),message,Toast.LENGTH_SHORT).show();
shimmerFrameLayout.stopShimmer();
shimmerFrameLayout.setVisibility(View.GONE);
//dialog.dismiss();
}
Code of adapter for horizontal recyclerview
public class MyItemAdapter extends RecyclerView.Adapter<MyItemAdapter.MyViewHolder> {
private Context context;
private List<ItemData> itemDataList;
String urlStart = "https://i1.ytimg.com/vi/";
String urlLast = "/mqdefault.jpg";
double screenWidth = 0;
public MyItemAdapter(Context context, List<ItemData> itemDataList) {
this.context = context;
this.itemDataList = itemDataList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View itemView = LayoutInflater.from(context).inflate(R.layout.layout_item, viewGroup,false);
DisplayMetrics displayMetrics = new DisplayMetrics();
screenWidth = getScreenWidth();
return new MyItemAdapter.MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
double itemWidth = screenWidth / 3.33;
myViewHolder.txt_item_title.setText(itemDataList.get(i).vn);
String urlImage = urlStart+itemDataList.get(i).vi+urlLast;
Log.e("urlImage",urlImage);
Glide.with(context)
.load(urlImage)
.placeholder(R.drawable.placeholder)
.error(R.drawable.placeholder)
.centerCrop()
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.into(myViewHolder.img_title);
myViewHolder.setiItemClickListener(new IItemClickListener() {
@Override
public void onItemclickListener(View view, int position) {
Toast.makeText(context,""+itemDataList.get(i).getVn(),Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return (itemDataList != null ? itemDataList.size() : 0);
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView txt_item_title;
ImageView img_title;
IItemClickListener iItemClickListener;
CardView itemCardView;
public void setiItemClickListener(IItemClickListener iItemClickListener) {
this.iItemClickListener = iItemClickListener;
}
public MyViewHolder(@NonNull View itemView) {
super(itemView);
txt_item_title = (TextView)itemView.findViewById(R.id.itemTitle);
img_title = (ImageView)itemView.findViewById(R.id.itemImage);
itemView = (CardView)itemView.findViewById(R.id.item_cardview);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view){
iItemClickListener.onItemclickListener(view,getAdapterPosition());
}
}
public static int getScreenWidth() {
return Resources.getSystem().getDisplayMetrics().widthPixels;
}
}
Code of adapter for vertical recyclerview
public class MyItemGroupAdapter extends RecyclerView.Adapter<MyItemGroupAdapter.MyViewHolder> {
private Context context;
private List<ItemGroup> dataList;
SnapHelper snapHelper;
public MyItemGroupAdapter(Context context, List<ItemGroup> dataList) {
this.context = context;
this.dataList = dataList;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View itemView = LayoutInflater.from(context).inflate(R.layout.layout_group, viewGroup,false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
myViewHolder.item_title.setText(dataList.get(i).getHeaderTitle());
List<ItemData> itemData = dataList.get(i).getListItem();
MyItemAdapter itemListAdapter = new MyItemAdapter(context,itemData);
myViewHolder.recyclerView_item_list.setHasFixedSize(true);
myViewHolder.recyclerView_item_list.setLayoutManager(new LinearLayoutManager(
context,LinearLayoutManager.HORIZONTAL,false));
myViewHolder.recyclerView_item_list.setAdapter(itemListAdapter);
myViewHolder.recyclerView_item_list.setNestedScrollingEnabled(false);
snapHelper.attachToRecyclerView(myViewHolder.recyclerView_item_list);
myViewHolder.btn_more.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"more clicked",Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return (dataList != null ? dataList.size() : 0);
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView item_title;
Button btn_more;
RecyclerView recyclerView_item_list;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
snapHelper = new GravitySnapHelper(Gravity.START);
item_title = itemView.findViewById(R.id.itemTitle);
btn_more = itemView.findViewById(R.id.btnMore);
recyclerView_item_list = itemView.findViewById(R.id.recycler_view_list);
}
}
}
Screenshot: