Java ViewHolder ImageView Android

Java ViewHolder ImageView Android,java,android,Java,Android,我设计了一个和弦对象,它由两个字符串和一个ImageView组成 public class Accordo { private String nome, note; private ImageView imagine; // all the get and set methods } 当我想在自定义ViewHolder中引用它时,更具体地说,当我覆盖onBindViewHolder()方法时,我写: holder.nome.setText(chord.getNome()); holder.n

我设计了一个和弦对象,它由两个字符串和一个ImageView组成

public class Accordo {
private String nome, note;
private ImageView imagine;

// all the get and set methods
}
当我想在自定义ViewHolder中引用它时,更具体地说,当我覆盖
onBindViewHolder()
方法时,我写:

holder.nome.setText(chord.getNome());
holder.note.setText(chord.getNote());
对于文本视图,我可以使用
setText()
方法。但是
图像视图的等价物是什么

编辑 我可以使用
setImageResource()
,但它从可绘图文件中获取int


因为我需要一个每行都有不同图像的recyclerView,所以我需要一些稍后可以在另一个类中设置的东西,比如:

private void prepareMovieData() {
        Movie movie = new Movie("Mad Max: Fury Road", "Action & Adventure", "**LocallyStoredImage**");
        movieList.add(movie);
        ...
    }

图像的等效项将是setImageResource()

  • 制作一个能容纳你的标题和图片的课程
  • 创建该特定类的ArrayList
  • 将数据添加到Arraylist
  • 列表后调用
    适配器.notifydatasetchanged()
    。添加(…)
  • 在您的
    onBindViewHolder()
    中使用类似于
    Picasso的东西来加载图像(猜测图像来自某种URI形式的数据库)

  • 考虑这种方法:

    • 首先,在显示RecyclerView项的类(Activity或Fragment)中,定义如下所示的Drawable的原始数组:

      private int[] menuIcons = {
          R.drawable.user,
          R.drawable.customer,
          R.drawable.list,
          R.drawable.leads
      };
      
    • 还可以在此处创建适配器的实例,以备以后使用

      private SampleRecyclerAdapter mAdapter;
      
    仍然从您的活动或片段初始化您的值

    private void initRecyclerViewData(){
    
       List<SampleData> data = new ArrayList<>();
    
       data.add(new DataObject("Title of row 1", menuIcons[0]));
       data.add(new DataObject("Title of row 2", menuIcons[1]));
       data.add(new DataObject("Title of row 3", menuIcons[2]));
       data.add(new DataObject("Title of row 4", menuIcons[3]));
    
       //now initialize your adapter - we will create the adapter next
       mAdapter = new SampleRecyclerAdapter(data);
       mRecyclerView.setAdapter(mAdapter);
       mAdapter.notifyDataSetChanged();
    }
    
    private void initRecycleServiceWdata(){
    列表数据=新的ArrayList();
    data.add(新的数据对象(“第1行标题”,菜单[0]);
    添加(新的数据对象(“第2行标题”,菜单[1]);
    添加(新的数据对象(“第3行标题”,菜单[2]);
    添加(新的数据对象(“第4行标题”,菜单[3]);
    //现在初始化适配器-我们将在下一步创建适配器
    mAdapter=新的采样器周期适配器(数据);
    mRecyclerView.setAdapter(mAdapter);
    mAdapter.notifyDataSetChanged();
    }
    
    现在我们已经初始化了适配器,让我们看看如何在绑定视图时显示适配器内的图像

    //inside your Adapter class;
    
    ....
    
    private List<DataObject> mMenuItemObjects;
    
    public SampleRecyclerAdapter(List<DataObject> menuItemObjects) {
        mMenuItemObjects = menuItemObjects;
    }
    
    @Override
    public void onBindViewHolder(MainMenuViewHolder holder, int position) {
        holder.itemName.setText(mMenuItemObjects.get(position).getName());
    
        holder.itemIcon.setImageResource(mMenuItemObjects.get(position).getIcon());
    }
    
    //在适配器类中;
    ....
    私有列表对象;
    公共采样器CyclerAdapter(列表菜单对象){
    mMenuItemObjects=menuItemObjects;
    }
    @凌驾
    BindViewHolder上的公共无效(主菜单ViewHolder,内部位置){
    holder.itemName.setText(mMenuItemObjects.get(position.getName());
    holder.itemIcon.setImageResource(mMenuItemObjects.get(position.getIcon());
    }
    
    上面的代码表示您有一个DataObject类型的
    ArrayList
    。请记住,当我们在活动中实例化适配器时,我们传递了一个数据数组,每个数据数组都有一个标题和一个图标(可绘制)

    这是在onBindViewHolder方法内的recyclerviewer上设置图像的最简单方法

    注意:必须创建ViewHolder类和DataObject(后者是普通的旧java对象)


    祝你好运,我希望这有帮助

    setImageResource()
    不接受整数吗?我已经定义了ImageViewYes,它需要一个int.holder.imagine.setImageResource(R.drawable.image);若您想使用url,那个么使用holder.imagine.setImageURI(Uri.parse(“图像路径”));因为我需要一个recyclerView,每一行都有一个不同的映像,所以我需要一些稍后可以在另一个classI中设置的东西。我希望您已经在这样做了:您将一个映像数组从活动或片段传递回适配器。然后根据位置,您可以设置ImageView的值谢谢您的回答,图像在本地存储,它们位于我的可绘制文件夹中。在这种情况下,如果图像小于10,您可以执行以下操作,例如,传递图像的名称。如果有3个图像,请保存、删除和编辑。您可以传递一个名为imageName的字符串(图像的名称类似于“编辑”或“保存”),并在
    onBindViewHolder()中运行一个开关,例如,if
    case“edit”:setImageResource(R.drawable.edit)哇!您的可绘图文件夹中有84幅图像?这会让你的Apk文件变得很大,伙计。相反,我建议将它们存储在像
    Cloudinary
    这样的平台上,然后使用
    Picasso
    从那里获取它们。这确实是我的第一个应用程序,所以我不知道它会增加多少应用程序大小。甚至因为我的想法是让这个应用程序完全离线。你能告诉我需要多少空间吗?它们的图像约为13KB,如果是13KB,则不会占用太多空间,大约为8-10mb或更少。但是如果你的应用程序处于脱机状态,你必须创建一个包含所有图像的int数组,然后在你的
    onBindViewHolder()
    中,在你的setImageResource中调用类似
    array[position]
    ,谢谢你的回答!在这样的84个图像的性能和空间上,它会花费多少?我一定会考虑把这些图像移到某个服务器的某个地方,然后使用PICASSO库来自动设置它们。将所有这些图像放在您的可绘制文件夹中,考虑到它们的大小,您可能会看到严重的速度影响!好吧,也许我会用你在答案中描述的方式来尝试,然后如果有问题,我会考虑把它们移到服务器上。让我知道它是如何进行的我应该在我的手风琴课中添加图像数组吗?
    //inside your Adapter class;
    
    ....
    
    private List<DataObject> mMenuItemObjects;
    
    public SampleRecyclerAdapter(List<DataObject> menuItemObjects) {
        mMenuItemObjects = menuItemObjects;
    }
    
    @Override
    public void onBindViewHolder(MainMenuViewHolder holder, int position) {
        holder.itemName.setText(mMenuItemObjects.get(position).getName());
    
        holder.itemIcon.setImageResource(mMenuItemObjects.get(position).getIcon());
    }