Android:自定义GridView数据没有第一次绑定



i通过读取来自firebase db的数据来显示图标列表(图像& text),首次称该活动为gridview显示空白。只有在我更改方向之后,加载数据。

请建议我如何首次显示它。谢谢

以下是我的代码:

            package com.abc.expensestracker;
          import android.app.Activity;
          import android.content.Intent;
          import android.os.Bundle;
          import android.support.v7.app.AppCompatActivity;
          import android.view.View;
          import android.widget.AdapterView;
          import android.widget.GridView;
          import com.google.firebase.database.DataSnapshot;
          import com.google.firebase.database.DatabaseError;
          import com.google.firebase.database.DatabaseReference;
          import com.google.firebase.database.FirebaseDatabase;
          import com.google.firebase.database.ValueEventListener;
          import java.util.ArrayList;
          public class NewCategoryIconListActivity extends AppCompatActivity {
              private GridView mIconListGridView;
              private IconsListGridViewAdapter mIconListGridViewAdapter;
              public ArrayList<IconsImageGridItemData> mIconsImageArrData = null;
              private DatabaseReference mIconImagesRef;

              @Override
              protected void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.activity_new_category_icon_list);

                  mIconListGridView = (GridView) findViewById(R.id.icons_list_gridview);
                  mIconImagesRef = FirebaseDatabase.getInstance().getReference().child("Iconimages");

                  mIconsImageArrData = new ArrayList<IconsImageGridItemData>();
                  setListData();
                  mIconListGridViewAdapter = new IconsListGridViewAdapter(this,R.layout.icons_single_item_layout,mIconsImageArrData);//(this, R.layout.icons_single_item_layout, mGridData);
                  mIconListGridView.setAdapter(mIconListGridViewAdapter);

                  mIconListGridViewAdapter.setGridData(mIconsImageArrData);

                  mIconListGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                      @Override
                      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                          //Get item at position
                          IconsImageGridItemData item = (IconsImageGridItemData) parent.getItemAtPosition(position);
                          String selectedIconURL = item.getIconURL();
                          //send back the selected icon to parent activity
                          Intent returnIntent = getIntent();
                          returnIntent.putExtra("icon_URL",selectedIconURL);
                          setResult(Activity.RESULT_OK,returnIntent);
                          finish();
                      }
                  });
              }

              /****** Function to set data in ArrayList *************/
              public void setListData()
              {
                    mIconImagesRef.addValueEventListener(new ValueEventListener() {
                      @Override
                      public void onDataChange(DataSnapshot dataSnapshot) {
                          for(DataSnapshot categorySnapshot: dataSnapshot.getChildren()){
                              String iconURL = categorySnapshot.child("iconURL").getValue(String.class);
                              final IconsImageGridItemData iconsImageData = new IconsImageGridItemData();
                              /******* Firstly take data in model object ******/
                              iconsImageData.setIconURL(iconURL);

                              /******** Take Model Object in ArrayList **********/
                              mIconsImageArrData.add(iconsImageData);
                          }
                      }
                      @Override
                      public void onCancelled(DatabaseError databaseError) {
                      }
                  });
              }
          }

形成您的上述代码,我能理解的是,执行

setListData();内的任务正在完成

mIconListGridViewAdapter.setGridData(mIconsImageArrData);

一个简单的更改应该起作用。在完成内部EventListener的OnDatAchange()函数后,您的SETLISTDATA()函数在侧面

 /******** Take Model Object in ArrayList **********/
                                  mIconsImageArrData.add(iconsImageData);
                              }// For finish 
                          mIconListGridViewAdapter.setGridData(mIconsImageArrData);
                     }// end of onDataChange 

这将确保您的适配器在完成Miconsimagearrdata

完成数据复制后才获取数据。

注意: - 我假设您肯定在调用notifydatasetchanged();在setGridData函数中复制数据。

您需要通知适配器您添加了一个项目。因此,在您的适配器中这样做:

public void add (IconsImageGridItemData iconsImageData) {
     mIconsImageArrData.add (0, iconsImageData);
     notifyItemInserted(0); //position to add the item
 }

然后在您的setListData中:

final IconsImageGridItemData iconsImageData = new IconsImageGridItemData();
                          /******* Firstly take data in model object ******/
                          iconsImageData.setIconURL(iconURL);
                          adapter.add (iconsImageData);

                          /******** Take Model Object in ArrayList**********/
                         // mIconsImageArrData.add(iconsImageData);

最新更新