Android 使用Glide在recyclerview中水平加载图像数组
我有一个recyclerview。我正试图将图像水平加载到它,但我不断得到以下错误Android 使用Glide在recyclerview中水平加载图像数组,android,android-recyclerview,imageview,horizontal-scrolling,Android,Android Recyclerview,Imageview,Horizontal Scrolling,我有一个recyclerview。我正试图将图像水平加载到它,但我不断得到以下错误 You must provide a Model of a type for which there is a registered ModelLoader, if you are using a custom model, you must first call Glide#register with a ModelLoaderFactory for your custom model class 我试着搜索
You must provide a Model of a type for which there is a registered ModelLoader, if you are using a custom model, you must first call Glide#register with a ModelLoaderFactory for your custom model class
我试着搜索了很多,但没有找到对我有帮助的答案。下面是我的代码
public class Images {
public String[] imageUrl;
public String[] getImageUrl() {
return imageUrl;
}
public void setImageUrl(String[] imageUrl) {
this.imageUrl = imageUrl;
}
public Images(String[] imageUrl) {
this.imageUrl = imageUrl;
}
}
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
private Context context;
private List<Images> imagesList;
public class MyViewHolder extends RecyclerView.ViewHolder {
public ImageView recyclerimageView;
public MyViewHolder(View view) {
super(view);
recyclerimageView=(ImageView)view.findViewById(R.id.recyclerlistitemimageview);
}
}
public RecyclerAdapter(Context context,List<Images> imagesList){
this.context=context;
this.imagesList=imagesList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.recyclerlistitem, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
// Glide.with(context).load(myarr).into(holder.recyclerimageView);
Images images=imagesList.get(position);
Glide.with(context).load(images.getImageUrl()).into(holder.recyclerimageView);
}
@Override
public int getItemCount() {
return imagesList.size();
// return myarr.length;
}
}
public class Arrayclass {
public static String activa3gimage3[]={"https://firebasestorage.googleapis.com/v0/b/venetian-honda-179411.appspot.....",
"https://firebasestorage.googleapis.......",
"https://firebasestorage.googleapis....",
"https://firebasestorage.googleapis......"};
}
公共类图像{
公共字符串[]imageUrl;
公共字符串[]getImageUrl(){
返回imageUrl;
}
public void setImageUrl(字符串[]imageUrl){
this.imageUrl=imageUrl;
}
公共图像(字符串[]图像URL){
this.imageUrl=imageUrl;
}
}
公共类RecyclerAdapter扩展了RecyclerView.Adapter{
私人语境;
私有列表图像列表;
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
公共图像视图回收图像视图;
公共MyViewHolder(视图){
超级(视图);
recyclerimageView=(ImageView)view.findViewById(R.id.recyclerlistitemimageview);
}
}
公共回收器适配器(上下文、列表图像列表){
this.context=context;
this.imagesList=imagesList;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.RecyclerList,父项,false);
返回新的MyViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
//使用(上下文)滑动。加载(myarr)。放入(holder.recyclerimageView);
Images=imagesList.get(位置);
Glide.with(context).load(images.getImageUrl())到(holder.recyclerimageView);
}
@凌驾
public int getItemCount(){
返回imagesList.size();
//返回myarr.length;
}
}
公共类数组类{
公共静态字符串activa3gimage3[]={”https://firebasestorage.googleapis.com/v0/b/venetian-honda-179411.appspot.....",
"https://firebasestorage.googleapis.......",
"https://firebasestorage.googleapis....",
"https://firebasestorage.googleapis......"};
}
我已将图像上传到服务器,并在activa3gimage3阵列中获取图像的uri
public class ModelLineUpInnerActivity extends AppCompatActivity {
private List<Images> imagesList = new ArrayList<>();
private RecyclerView recyclerView;
private RecyclerAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_model_line_up_inner);
recyclerView=(RecyclerView)findViewById(R.id.recyclerview);
Images images=new Images(Arrayclass.activa3gimage3);
imagesList.add(images);
mAdapter = new RecyclerAdapter(ModelLineUpInnerActivity.this,imagesList);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
}
}
公共类ModelLineUpInnerActivity扩展了AppCompatActivity{
private List imagesList=new ArrayList();
私人回收站;
私人回收设备制造商;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u model\u line\u up\u inner);
recyclerView=(recyclerView)findViewById(R.id.recyclerView);
图像=新图像(Arrayclass.activa3gimage3);
imagesList.add(图像);
mAdapter=new RecyclerAdapter(modelllineupinnerActivity.this,imagesList);
setLayoutManager(新的LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true));
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
}
}
我知道该错误是由于Glide引起的,我正在尝试将图像数组加载到其中,但不知道如何解决它。如有任何帮助,我们将不胜感激。images.getImageUrl()
是数组,您需要一个带有图像url的字符串
使用List
而不是List
(同时在RecyclerAdapter
和ModelLineUpInnerActivity
中更新它)
之后,您可以加载图像:
String image = imagesList.get(position);
Glide.with(context).load(image).into(holder.recyclerimageView);
您需要使用单个url下载图像,并使用带有索引的数组将图像加载到单个图像中,所以请使用
Glide.with(context).load(images.getImageUrl()[position]).into(holder.recyclerimageView);
// ^^^^^^^^^^
更新:
您的列表仅包含单个项目,因此您需要修改包含其中所有项目的列表
Images images=new Images(Arrayclass.activa3gimage3);
imagesList.add(images); // single item so single view
使用列表
并避免使用图像
,因为适配器只需要字符串url
即可加载图像
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
private Context context;
private List<String> imagesList;
// use String list
public RecyclerAdapter(Context context,List<String> imagesList){
this.context=context;
this.imagesList=imagesList;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Glide.with(context).load(imagesList.get(position)).into(holder.recyclerimageView);
}
@Override
public int getItemCount() {
return imagesList.size();
}
// ... code
公共类RecyclerAdapter扩展了RecyclerView.Adapter{
私人语境;
私有列表图像列表;
//使用字符串列表
公共回收器适配器(上下文、列表图像列表){
this.context=context;
this.imagesList=imagesList;
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
使用(上下文)滑动。加载(imagesList.get(position))。到(holder.recyclerimageView);
}
@凌驾
public int getItemCount(){
返回imagesList.size();
}
//…代码
和安装适配器一样
private List<String> imagesList = new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_model_line_up_inner);
recyclerView=(RecyclerView)findViewById(R.id.recyclerview);
imagesList.addAll(new ArrayList<>(Arrays.asList(Arrayclass.activa3gimage3)));
mAdapter = new RecyclerAdapter(ModelLineUpInnerActivity.this,imagesList);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
}
private List imagesList=new ArrayList();
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u model\u line\u up\u inner);
recyclerView=(recyclerView)findViewById(R.id.recyclerView);
addAll(新的ArrayList(Arrays.asList(Arrayclass.activa3gimage3));
mAdapter=new RecyclerAdapter(modelllineupinnerActivity.this,imagesList);
setLayoutManager(新的LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true));
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
}
但是我想加载图像数组show加载图像数组,知道吗?更新的答案@CycleIt只加载数组的第一个图像你更新了RecyclerAdapter吗?你能显示更新的代码吗?@cycle它只加载第一个图像。我想加载数组的所有图像。可以在一次加载多个图像吗使用glide或picasso查看图像?是的,我在上面,我看到了这个问题,更新了答案,简而言之,你需要使用列表中的所有项目,而不是单个图像。你真的想使用image
类吗?因为它可以通过使用带有recyclerView
的数组来消除,如果它可以解决问题,就不必使用image类登月舱
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
private Context context;
private List<String> imagesList;
// use String list
public RecyclerAdapter(Context context,List<String> imagesList){
this.context=context;
this.imagesList=imagesList;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Glide.with(context).load(imagesList.get(position)).into(holder.recyclerimageView);
}
@Override
public int getItemCount() {
return imagesList.size();
}
// ... code
private List<String> imagesList = new ArrayList<>();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_model_line_up_inner);
recyclerView=(RecyclerView)findViewById(R.id.recyclerview);
imagesList.addAll(new ArrayList<>(Arrays.asList(Arrayclass.activa3gimage3)));
mAdapter = new RecyclerAdapter(ModelLineUpInnerActivity.this,imagesList);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(mAdapter);
}