【问题标题】:android display image on specific row of listviewandroid在listview的特定行上显示图像
【发布时间】:2011-07-01 13:48:03
【问题描述】:

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

【问题讨论】:

    标签: android image listview


    【解决方案1】:

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

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

    int getViewTypeCount();
    

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

    int getItemViewType(int position);
    

    你需要在这里设置一些逻辑来检查参数位置的声音文件是否正在播放?如果该位置的项目正在播放,则应返回一个常量 int,如 TYPE_PLAYING,否则返回 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. 绑定每个文件的其他信息:文件名、时间长度等

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

    愿它有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多