I am trying to fetch data from the firebase to put on the view. My problem is how to get the data before the view is loaded. The array "mServicesNameSet" only has elements after the view has been loaded.
I tried to set the adapter on "OnStart" and using Thread.sleep() but didn't work.
public class NewSubCategoriesActivity extends AppCompatActivity {
private static final String TAG = "NewSubCategoriesActivity";
private ViewPager mViewPager;
private ArrayList<String> mServicesNameSet;
private int[] mImagesSet = {
R.drawable.homa_gardening,
R.drawable.paint
};
NewSubCategoriesAdapter mCardAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_sub_categories);
mServicesNameSet = new ArrayList<>();
Bundle b = this.getIntent().getExtras();
String category = null;
if (b != null) {
category = b.getString("category");
}
DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference();
mViewPager = findViewById(R.id.viewPagerSubCategories);
mCardAdapter = new NewSubCategoriesAdapter(NewSubCategoriesActivity.this);
mDatabaseReference.child("categories").child(category).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.e("Count ", "" + dataSnapshot.getChildrenCount());
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Service service = postSnapshot.getValue(Service.class);
if (service != null) {
if (!mServicesNameSet.contains(service.getSubCategory())) {
mServicesNameSet.add(service.getSubCategory());
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "getServices:onCancelled", databaseError.toException());
}
});
}
@Override
protected void onStart() {
super.onStart();
for (int i = 0; i < mServicesNameSet.size(); i++) {
mCardAdapter.addCardItemS(new CardItemString(mServicesNameSet.get(i), mImagesSet[i]));
}
ShadowTransformer mCardShadowTransformer = new ShadowTransformer(mViewPager, mCardAdapter);
mViewPager.setAdapter(mCardAdapter);
mViewPager.setPageTransformer(false, mCardShadowTransformer);
mViewPager.setOffscreenPageLimit(3);
}
}