Java ViewHolder ImageView Android
我设计了一个和弦对象,它由两个字符串和一个ImageView组成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
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()中运行一个开关,例如,ifcase“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());
}