晚上好。
我有一个测试代码,我想在其中填充一个具有 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;
}
}
很高兴收到你们的好建议! 非常感谢。
最佳答案
我正在使用 Glide 在我的 RecyclerView 中填充图像。给定一个作为 HTTP URL 的字符串,Glide 将解析该字符串并在您的 ImageView 中显示位于该 HTTP 地址的图像。
这是 Glide 的链接:https://github.com/bumptech/glide
您需要在您的 build.gradle 中包含 Glide:
compile 'com.github.bumptech.glide:glide:3.7.0'
在 ViewHolder 中创建一个使用 Glide 设置图像的方法 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() 方法,并将来自您的 Pictures 模型的 getDownloadURL() 的返回值作为参数传递:
@Override
protected void populateViewHolder(PicturesHolder viewHolder, Pictures model, int position) {
viewHolder.setImage(model.getDownloadURL());
}
关于java - 使用 Firebase 数据库填充 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40956090/