我正在尝试从Firebase提取数据以放入视图。我的问题是在加载视图之前如何获取数据。 加载视图后,数组“ 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);
}
}
答案 0 :(得分:0)
简短的回答,不能。 Firebase可能需要一段时间才能返回数据(几百到几千毫秒),如果您强制视图等待到这种情况发生,则应用将挂起。它必须能够在等待Firebase时显示某物。
一种解决方案是隐藏活动中的主视图并显示进度条,然后在firebase调用返回时将其隐藏进度条,然后更新并显示视图,然后再将其检索到的数据显示出来。