2016-12-04 151 views
2

晚上好。使用Firebase數據庫填充RecyclerView

我有一個測試代碼,我想填充一個ImageView的RecycleView。 ImageView將充滿來自Firebase數據庫中URL的JPG圖像。

問題是我沒有得到如何檢索數據和填充recycleview 我正在閱讀Github上的FirebaseUI,但真誠地發現它有點困難,因爲我在這個應用程序中獨處。

這是在MainActivity代碼:

public class MainActivity extends AppCompatActivity{ 


    DatabaseReference mReference; 
    DatabaseReference mURLReference; 

    public FirebaseRecyclerAdapter<Pictures, PicturesHolder> mRecyclerViewAdapter; 
    //UI 
    RecyclerView mImagesRV; 
    LinearLayoutManager mManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 


     mReference = FirebaseDatabase.getInstance().getReference(); 
     mURLReference= mReference.child("Pictures Data"); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

      } 
     }); 

     mImagesRV=(RecyclerView)findViewById(R.id.recyclerView); 

     mManager=new LinearLayoutManager(this); 
     mManager.setReverseLayout(false); 

     mImagesRV.setHasFixedSize(false); 
     mImagesRV.setLayoutManager(mManager); 

    } 

    public void onAttachRecyclerView() 
    { 

     Query lastHundred = mURLReference.limitToLast(100); 
     mRecyclerViewAdapter = new FirebaseRecyclerAdapter<Pictures, PicturesHolder>(
       Pictures.class,R.layout.content_main,PicturesHolder.class, lastHundred 
     ) { 
      @Override 
      protected void populateViewHolder(PicturesHolder pictureView, Pictures pictures, int position) { 


      } 
     }; 
    } 
} 

這是我用FirebaseDatabase插入數據對象(我只想URL):

public class Pictures { 


    String pictureID; 
    String downloadURL; 
    double latitude; 
    double longitude; 

    public Pictures() { 

    } 

    public void setPictureID(String pictureID) { 
     this.pictureID = pictureID; 
    } 

    public void setDownloadURL(String downloadURL) { 
     this.downloadURL = downloadURL; 
    } 

    public void setLatitude(double latitude) { 
     this.latitude = latitude; 
    } 

    public void setLongitude(double longitude) { 
     this.longitude = longitude; 
    } 

    public String getPictureID() { 
     return pictureID; 
    } 

    public String getDownloadURL() { 
     return downloadURL; 
    } 

    public double getLatitude() { 
     return latitude; 
    } 

    public double getLongitude() { 
     return longitude; 
    } 
} 

這是ViewHolder,我不知道它是否好..

public class PicturesHolder extends RecyclerView.ViewHolder { 

    ImageView imageView; 

    public PicturesHolder(View itemView) 
    { 
     super(itemView); 
     imageView = (ImageView) itemView.findViewById(R.id.picture_view); 

    } 

    public void setImageView(ImageView imageView) { 
     this.imageView = imageView; 
    } 
} 

這將是很高興收到你們的好建議! 非常感謝。

+0

嗯,我從來沒有使用過firebase數據庫,但你用什麼網絡?因爲我看不到任何東西。 –

+0

首先,您需要提供populateViewHolder的實現,以將圖片中的數據複製到PictureHolder視圖中。其次,您可能不希望有方法將視圖設置到PictureHolder中。 ViewHolders只提取對傳入的itemView中發現的視圖的引用。相反,你可能想要下載url並使用Glide之類的東西來下載圖像並將其放置到ImageView中。最後,如果您不熟悉RecyclerView的工作方式,則可能需要先做一個簡單的示例,而不使用Firebase。 –

回答

1

我正在使用Glide在我的RecyclerView中填充圖像。給定一個HTTP URL的字符串,Glide將解析字符串並顯示駐留在ImageView中該HTTP地址的圖像。

這裏有一個鏈接到滑翔:https://github.com/bumptech/glide

您需要在您的build.gradle滑行:

compile 'com.github.bumptech.glide:glide:3.7.0' 

在ViewHolder創建一個方法,setImage()使用滑翔設置圖像:

public static class PicturesHolder extends RecyclerView.ViewHolder { 
    Context ctx; 
    ImageView image; 

    public PicturesHolder(View v) { 
     super(v); 
     this.ctx = v.getContext(); 
     this.image = (ImageView) v.findViewById(R.id.myImageView); 
    } 

    public void setImage(String url) { 
     Glide.with(ctx) 
       .load(url) 
       .into(image); 
    } 
} 

然後在populateViewHolder,你會從你的viewholder調用setImage()方法並作爲參數傳遞getDownloadURL的返回值()FR om你的圖片模型:

@Override 
    protected void populateViewHolder(PicturesHolder viewHolder, Pictures model, int position) { 
     viewHolder.setImage(model.getDownloadURL()); 
} 
+0

它的工作,你是一個天使!謝謝你,謝謝你,謝謝你! –