Загружать данные из базы данных Firebase Real в Gridview - PullRequest
0 голосов
/ 28 сентября 2018

У меня просто есть некоторая проблема, когда я хочу получить данные из firebase и загрузить их в GridView, но данные не отображаются, пока я не поверну свой телефон из портретной в альбомную или наоборот:

Это когда я запускаю приложение (данные не отображаются)

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

Когда я поворачиваю свой телефон, чтобы начать альбомную ориентацию, начинают появляться данные

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

Наконец, когда я переворачиваю свой телефон в книжную ориентацию, данные успешно загружены

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

Я попробовал несколько способов выяснить это как (обновить вид сетки 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) {
        }
      });
    }
}
...