gpt4 book ai didi

android - 将 Firebase Real 数据库中的数据加载到 Gridview

转载 作者:行者123 更新时间:2023-12-04 17:44:54 24 4
gpt4 key购买 nike

当我想从 firebase 检索数据并将其加载到 GridView 时,我遇到了一些问题,但是直到我将手机从纵向旋转到横向时,数据才出现,反之亦然:

当我启动应用程序时(数据未出现)

this when I start the app ( data doesn't appear )

当我将手机旋转到横向 View 时,数据开始出现

when I rotate my phone to landscape view data start to appear

最后,当我将手机重新旋转到纵向 View 时,数据加载成功

Finally, when I re-rotate my phone to portrait view, data loaded successfully

我尝试了一些方法来解决这个问题,比如(刷新 GridView gridview.notifyalldatachanged()),但没有一个能解决这个问题。

我的代码非常简单:创建新的自定义适配器并将其设置为 gridview

public class ReceipesActivity extends AppCompatActivity {

GridView gridView;
ArrayList<String> RecipeImageUrl=new ArrayList<String>();
ArrayList<String> RecipeTitle=new ArrayList<String>();
DatabaseReference mdata;
MyCustomAdapter myCustomAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receipes);
gridView = (GridView) findViewById(R.id.GridviewID);
mdata = FirebaseDatabase.getInstance().getReference("Categories").child("انواع الخبز");
LoadDataFromFirebase();
myCustomAdapter = new MyCustomAdapter(RecipeImageUrl,RecipeTitle);
gridView.setAdapter(myCustomAdapter);
}

@Override
protected void onStart() {
super.onStart();
}

//My Custom Adapter for GridView

public class MyCustomAdapter extends BaseAdapter {

ArrayList<String> RecipeImageUrl;
ArrayList<String> RecipeTitle;

MyCustomAdapter(ArrayList<String> RecipeImageUrl,ArrayList<String> RecipeTitle) {
Toast.makeText(ReceipesActivity.this, "hey to start", Toast.LENGTH_SHORT).show();
this.RecipeImageUrl = RecipeImageUrl;
this.RecipeTitle = RecipeTitle;
}

@Override
public int getCount() {
return this.RecipeImageUrl.size();
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = getLayoutInflater();
View view = layoutInflater.inflate(R.layout.grid_view_custom, null);
ImageView imageView = (ImageView) view.findViewById(R.id.GridRecipeImageID);
TextView textView = (TextView) view.findViewById(R.id.GridRecipeTitleID);
Toast.makeText(ReceipesActivity.this, "sdfgsfg" + RecipeTitle.get(position), Toast.LENGTH_SHORT).show();
textView.setText(RecipeTitle.get(position)); Picasso.with(getApplicationContext()).load(RecipeImageUrl.get(position)).into(imageView);
return view;
}

}

public void LoadDataFromFirebase() {
mdata.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
RecipeTitle.add(ds.child("title").getValue().toString());
RecipeImageUrl.add(ds.child("image").getValue().toString());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}

最佳答案

您是否尝试在填充 RecipeTitle 和 RecipeImageUrl 列表后添加 myCustomAdapter.notifyDataSetChanged()?

这是一个例子:

public void LoadDataFromFirebase() {
mdata.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
RecipeTitle.add(ds.child("title").getValue().toString());
RecipeImageUrl.add(ds.child("image").getValue().toString());
}
myCustomAdapter.notifyDataSetChanged(); // THIS WILL NOTIFY YOUR ADAPTER WHEN DATA IS CHANGED
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}

关于android - 将 Firebase Real 数据库中的数据加载到 Gridview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52559068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com