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

时间:2011-07-01 02:09:04

标签: android image listview

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

1 个答案:

答案 0 :(得分:1)

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

您需要覆盖BaseAdapter的方法以满足您的需求。最重要的是:

int getViewTypeCount();

在你的情况下,列表包含两种项目:播放或不播放,因此此方法应返回2.

int getItemViewType(int position);

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

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

此方法拥有最多的TODO,我认为您可以按照以下步骤操作:

  1. 查找位置的项目类型,TYPE_PLAYING或TYPE_NONPLAYING

  2. 获取LayoutInflater的一个实例,为两个不同类型的项目膨胀不同的布局文件,TYPE_PLAYING项目应该包含图像,以指示该项目的相应文件正在播放。请注意,您需要一个Context变量来检索LayoutInflater。您可以在Adapter中声明Context成员并在Adapter的构造函数中初始化它。

  3. 绑定每个文件的其他信息:文件名,时间长度等。

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

    愿它有所帮助。