Android 使用Glide在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 我试着搜索

我有一个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
我试着搜索了很多,但没有找到对我有帮助的答案。下面是我的代码

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);
    }