Firebase 返回空数组的ViewPager
启动我的应用程序时,我希望我的Firebase 返回空数组的ViewPager,firebase,arraylist,firebase-realtime-database,android-viewpager,android-pageradapter,Firebase,Arraylist,Firebase Realtime Database,Android Viewpager,Android Pageradapter,启动我的应用程序时,我希望我的customSwipeAdapter.java等待,直到我的savedImages ArrayList收到并填充了来自firebase的数据。但是我的类正在运行,而我的整个页面是空的,因为getCount()方法将savedImages.size()返回为0,因为我的arraylist没有及时填充。当我的数组列表被填充时,关于运行我的类的任何帮助。不确定在这里做什么:) customSwipeAdapter.java public class customS
customSwipeAdapter.java
等待,直到我的savedImages ArrayList
收到并填充了来自firebase的数据。但是我的类正在运行,而我的整个页面是空的,因为getCount()
方法将savedImages.size()
返回为0,因为我的arraylist没有及时填充。当我的数组列表被填充时,关于运行我的类的任何帮助。不确定在这里做什么:)
customSwipeAdapter.java
public class customSwipeAdapter extends PagerAdapter {
private Firebase mRef;
private Context ctx;
private LayoutInflater layoutInflator;
public customSwipeAdapter(Context ctx) {
this.ctx = ctx;
}
private int[] frontImages = {R.drawable.amen_parham, R.drawable.janel_parham, R.drawable.kevin_parham};
// Populate ArrayList with firebase data
List<String> savedImages = new ArrayList<String>();
Boolean goingToCallOnce = false;
Boolean finishedLoadingData = false;
@Override
public int getCount() {
return savedImages.size();
}
@Override
public boolean isViewFromObject(View view, Object o) {
return (view == o);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
getSavedImages_FromDB();
layoutInflator = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View item_view = layoutInflator.inflate(R.layout.swipe_layout, container, false);
final EasyFlipView mYourFlipView = (EasyFlipView) item_view.findViewById(R.id.flipView);
ImageView imageView_Front = (ImageView) item_view.findViewById(R.id.imageView_Front);
imageView_Front.setImageResource(frontImages[position]);
container.addView(item_view);
System.out.println(savedImages);
return item_view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((RelativeLayout)object);
}
public void getSavedImages_FromDB() {
mRef = new Firebase("");
if (goingToCallOnce == false) {
goingToCallOnce = true;
mRef.child("Q6i3fI6lNdYYS0z5Jty4WUYE9g13").child("SavedImages").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String savedImage = (String) dataSnapshot.child("Image").getValue();
savedImages.add(0, savedImage);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
mRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
finishedLoadingData = true;
System.out.println("finishedLoadingData");
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
}
我建议您首先在活动中从Firebase加载数据,然后将其作为参数传递给适配器的构造函数。这样,您的
CustomSwipeAdapter
将类似于以下内容:
public class customSwipeAdapter extends PagerAdapter {
private Firebase mRef;
private Context ctx;
private LayoutInflater layoutInflator;
List<String> savedImages = new ArrayList<String>();
public customSwipeAdapter(Context ctx, List<String> savedImages){
this.ctx = ctx;
this.savedImages = savedImages
}
...
}
我建议您首先在活动中从Firebase加载数据,然后将其作为参数传递给适配器的构造函数。这样,您的
CustomSwipeAdapter
将类似于以下内容:
public class customSwipeAdapter extends PagerAdapter {
private Firebase mRef;
private Context ctx;
private LayoutInflater layoutInflator;
List<String> savedImages = new ArrayList<String>();
public customSwipeAdapter(Context ctx, List<String> savedImages){
this.ctx = ctx;
this.savedImages = savedImages
}
...
}
因此,我想澄清一下,您的意思是在我的savedCardsViewController类中获取我的数据,并在数据加载完成后调用我的viewPager.setAdapter(adapter)等等?它希望我将方法“customSwipeAdapter”的第一个参数从“Context”更改为“ValueEventListener”,但当我这样做时,应用程序崩溃了?我将编辑我的问题并提供一个指向上面图片的链接。我刚刚在一个单独的方法中添加了(adapter=new customSwipeAdapter(这个,savedImages);viewPager.setAdapter(adapter);viewPager.setPageTransformer(false,new DefaultTransformer());)并调用了该方法,谢谢你,朋友:)我很高兴你自己解决了之前评论中的问题。不客气:)你知道当添加一个新的savedImages时我将如何更新我的视图吗?因此,请澄清一下,你的意思是在我的savedCardsViewController类中获取我的数据,一旦数据加载完毕,请调用我的viewPager.setAdapter(adapter)等等?它想让我将“customSwipeAdapter”方法的第一个参数从“Context”更改为“ValueEventListener”,但当我这样做时,应用程序会崩溃吗?我将编辑我的问题并提供一个指向上面图片的链接。我刚刚在一个单独的方法中添加了(adapter=new customSwipeAdapter(这个,savedImages);viewPager.setAdapter(adapter);viewPager.setPageTransformer(false,new DefaultTransformer());)并调用了该方法,谢谢你,朋友:)我很高兴你自己解决了之前评论中的问题。不客气:)您是否知道在添加新的savedImages时,我将如何更新视图?
mRef.child("Q6i3fI6lNdYYS0z5Jty4WUYE9g13").child("SavedImages").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Iterator<DataSnapshot> data = dataSnapshot.getChildren().iterator();
while(data.hasNext())
{
String savedImage = (String) data.next().child("Image").getValue();
savedImages.add(0, savedImage);
}
//Data has finished loading. Load your adapter
adapter = new customSwipeAdapter(this, savedImages);
viewPager.setAdapter(adapter);
viewPager.setPageTransformer(false, new DefaultTransformer());
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});