【问题标题】:Android ListView using a key-value map type structure possible?Android ListView 可以使用键值映射类型结构吗?
【发布时间】:2011-11-02 02:09:43
【问题描述】:

我有一个从字符串数组资源填充的 ListView。 I'm trying to figure out how I can use a key-value type of structure, so that the key is displayed in the ListView, and when a row is selected I can get the value.

我知道我可以为值维护一个单独的数组并使用所选行的索引进行查找,但这很难维护。

另外我认为我可以使用我自己的自定义列表适配器创建一个 POJO 并使用这些对象构建列表,但如果可能的话,我想只使用一个简单的 xml 文件。

我正在阅读文档以查看是否可以在 xml 中执行此操作,但我还没有找到类似的内容?

感谢您的宝贵时间。

【问题讨论】:

    标签: android listview


    【解决方案1】:

    我刚刚创建了一堆 POJO,并使用自定义列表适配器在 List Row 中显示来自 Object 的相关数据。

    【讨论】:

      【解决方案2】:

      您可能希望使用已排序的 Map,例如 TreeMapLinkedHashMap,并将其传递给您的适配器。

      这将实现您想要实现的目标。

      您基本上需要有一个适配器,该适配器利用键值对数据结构 (Map) 并将其设置在您的列表视图中,例如:

      
      
      public class OrderedMapAdapter extends BaseAdapter {
      
              Map.Entry[]  entries;
      
              /***
               * Pass the key value pair map using an ordered map data structure
               * @param orderedMap An ordered map, either LinkedHashMap or TreeMap
               */
              public OrderedMapAdapter(LinkedHashMap orderedMap) {
                  this.entries = orderedMap.entrySet().toArray(new Map.Entry[0]);
              }
      
              public int getCount() {
                  return entries.length;
              }
      
              /***
               * This should get you the position you want in Key-value pair format
               * that you could use whenever the row is selected
               */
              public Map.Entry getItem(int position) {
                  return entries[position];
              }
      
              public long getItemId(int position) {
                  return position;
              }
      
              public View getView(int position, View convertView, ViewGroup parent) {
                  // display your view here
                  return null;
              }
          }
      
      

      【讨论】:

      • 抱歉,我不确定您是否正确阅读了我的问题,我不是在询问要使用什么 Java 类型。我在问如何在 XML 中声明一个 Map 并在我的 ListView 中使用它。
      • 嗯,我可能有。当您说字符串数组资源时,您是说要放入 ListView 中的 strings.xml 吗?
      • 不,当我说字符串数组时,我只是在描述我到目前为止所做的事情以及我想如何实际做一些有点不同的事情,正如我稍后描述的那样。无论如何,没有内置的“android”方法可以做到这一点,所以我用静态数组来做。
      • 那么我想我的回答是正确的。您只需要创建自己的 BaseAdapter 扩展并使用我上面提到的有序 Map 作为数据结构(因为它们已经被构造为键值对)。如果你愿意,我可以提供一个框架代码。
      • 是的,我知道,这是我已经提到的选项之一,使用我自己的适配器映射 POJO 或维护两个数组。同样,我的问题是问我是否可以简单地在 android 中用 XML 而不是在 Java 中做到这一点。我的意思不是我自己读取和解析 XML,我的意思是使用 Android 框架,但是很遗憾,它不受支持。
      【解决方案3】:

      我相信您使用自定义列表适配器的第二个建议将是您想要做的最简单的解决方案。

      SimpleAdapter 驱动您提到的 XML 文件方法,并且对它接收的数据格式非常特别。如果您可以重组输入数据的格式以匹配,SimpleAdapter 将正常工作。

      否则使用 ArrayAdapter 和 POJO,并构建您的实施所需的列表。

      【讨论】:

      • 似乎没有“android”的方式来做到这一点。我必须要么将我自己的 XML 解析到地图中,要么只在代码中构建地图,grrr。
      • 你可以让 XStream 为你做很多工作:stackoverflow.com/questions/1537207/…。我没有在 Android 中尝试过 XStream,但他们的文档表明它可以工作,这取决于你是否能负担得起额外的 jar 依赖......
      猜你喜欢
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      相关资源
      最近更新 更多