android在listview的特定行上显示图像

android在listview的特定行上显示图像,android,image,listview,Android,Image,Listview,我有一个包含25个不同项目的列表视图。当我点击一个项目时,相应的声音文件被添加到一个数组中,当然从索引0开始,当选择更多的项目时,每个相应的声音文件被添加到数组的下一个索引中。因此,当按下播放按钮时,与索引0关联的声音文件播放,然后是索引1的声音,依此类推,直到没有更多的索引。有了这一点点(可能是不必要的)背景信息,我如何将图像添加到当前播放的项目的列表视图中?像ipod一样,我想在当前播放的声音行的右侧显示一个图标。我有一个图标,我可以显示它,但我不知道如何根据播放的声音/数组索引告诉它显示在

我有一个包含25个不同项目的列表视图。当我点击一个项目时,相应的声音文件被添加到一个数组中,当然从索引0开始,当选择更多的项目时,每个相应的声音文件被添加到数组的下一个索引中。因此,当按下播放按钮时,与索引0关联的声音文件播放,然后是索引1的声音,依此类推,直到没有更多的索引。有了这一点点(可能是不必要的)背景信息,我如何将图像添加到当前播放的项目的列表视图中?像ipod一样,我想在当前播放的声音行的右侧显示一个图标。我有一个图标,我可以显示它,但我不知道如何根据播放的声音/数组索引告诉它显示在哪一行上。我读过关于将图像添加到ListView的不同教程,但实际上没有读过关于仅将一个图像添加到特定行的教程。

要解决您的问题,我认为您可能需要通过重写抽象方法来实现自己的子类。与SimpleAdapter和SimpleCursorAdapter一样,新适配器将数据(在您的情况下是声音文件)绑定到列表,但是BaseADapter应该能够找到列表的每个位置应该显示什么样的视图,并且能够生成适当的列表视图项

您需要重写BaseAdapter的方法以满足您的需要。最重要的是:

int getViewTypeCount();
在您的例子中,列表包含两种类型的项:播放或不播放,因此此方法应返回2

int getItemViewType(int position);
您需要在这里输入一些逻辑来检查参数位置的声音文件是否正在播放?如果该位置上的项目正在播放,则应返回一个常量int,如TYPE_playing,否则返回TYPE_NONPLAYING(当然需要提前定义这些常量)

这是一种有最多待办事项的方法,我认为您可以按照以下步骤进行操作:

  • 在位置上查找项目类型,类型为播放或非播放

  • 获取LayoutFlater的实例以将不同的布局文件膨胀为两种不同类型的项目,播放项目的类型应包括图像,以指示正在播放的项目的相应文件。注意,您需要一个上下文变量来检索LayoutFlater。您可以在适配器中声明上下文成员,并在适配器的构造函数中初始化它

  • 绑定每个文件的其他信息:文件名、时间长度等

  • 如果通过单击列表项或其他交互来更改播放文件,请不要忘记调用BaseAdapter的notifyDatasetChanged()方法来刷新列表

    愿它有帮助

    View getView(int position, View convertView, ViewGroup parentview);