Я пытаюсь получить данные из базы данных для отображения в представлении.Моя проблема заключается в том, как получить данные до загрузки представления.Массив «mServicesNameSet» содержит элементы только после загрузки представления.
Я попытался установить адаптер на «OnStart» и использовать Thread.sleep (), но не сработал.
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);
}
}