从HashMap获取值并添加到ListView中。

3

我有一个HashMap

HashMap<String, Integer> map = new HashMap<String, Integer>();

在地图上有一些数值。我想逐个获取这些数值并将其添加到列表视图中。该数值存储在地图中,如下所示:

{Intent { cmp=Bluetooth/300 }=300, Intent { cmp=Audio/400 }=400, Intent { cmp=Video/500 }=500, Intent { cmp=Display/100 }=100, Intent { cmp=WiFi/200 }=200}

列表视图中有两个文本视图。我希望在列表视图中显示如下内容:

Display 100

WiFi 200

Bluetooth 300.

现在我发布了一个适配器类,它将对您有所帮助...
private class NewAdapter extends BaseAdapter {

        public NewAdapter(IntentTestingActivity intentTestingActivity,
                HashMap<String, Integer> map) {
        }

        @Override
        public int getCount() {
            Log.d(TAG, "Map size is: " + map.size());
            return map.size();
        }

        @Override
        public Object getItem(int arg0) {
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            return 0;
        }

        @Override
        public View getView(int position, View view, ViewGroup parent) {

            View v = view;

            if (v == null) {

                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                v = vi.inflate(R.layout.class_name, null);

            }

            TextView className = (TextView) v.findViewById(R.id.name);
            TextView tagName = (TextView) v.findViewById(R.id.tag_name);

            Integer key_name;
            key_name = map.get(name);

            Log.d(TAG, "Complete map is: " + map.toString());

            // String tag = map.get(tagName).toString();
            // Integer name = map.get(className);

            String keyName;
            keyName = map.toString();
            Log.d(TAG, "KeyName is: " + map.get(tag));

            for (int i = 0; i < map.size(); ++i)
                Log.d(TAG, "Tag is: " + tag + " and Name is: " + name + " and Intent is: "+intent);

            HashMap<String, Integer> hashmap = map;
            for (Entry<String, Integer> e : hashmap.entrySet()) {
                String key = e.getKey();
                int value = e.getValue();

                Set<String>keyname = map.keySet();

            Log.d(TAG, "Key: " + key+ " Value: "+value);
            }


            className.setText(name.toString());
//           tagName.setText(keyName);
            return v;
        }

    }

当name只是一个字符串,其中包含所有的键值对,比如Display、Vedio等。

提前致谢...


我不明白这些+1和收藏是什么意思?我错过了什么吗 :$? - Sherif elKhatib
3个回答

4
您可以创建一个包含getter-setter的POJO类,并将键和值设置为该类。
        List<POJO> list = new ArrayList<POJO>();
        Iterator<Entry<String, Integer>> iterator = map.entrySet().iterator();
        Entry< String, Integer> entry;
        while(iterator.hasNext()){
            POJO obj = new POJO();
            entry = iterator.next();
            Log.d("Key Value",entry.getKey()+" "+entry.getValue());
            obj.setKey(entry.getKey());
            obj.setValue(entry.getValue());
            list.add(obj);
        }

接下来将这个列表设置到你的适配器类中。这是一种简单的方法。


我已经制作了一个自定义适配器。在getview方法中,我编写了以下代码:Integer key_name; key_name = map.get(name);className.setText(name.toString());其中className是TextView。但是在listView中只打印Video。但我想要打印所有的名称。 - Android Boy
我提供在我的自定义适配器的getView方法中编写的代码。 - Android Boy
名称只是一个字符串,其中我获取所有键的名称。例如显示、视频、wifi等。如果您想要源代码,请提供您的电子邮件地址。我会给您发送邮件。 - Android Boy
你必须以这种方式发布你的适配器类,否则它完全没有帮助。 - Lalit Poptani
你在适配器类中的 for loop 将会为每个列表项调用,这是不好的编码规范,更好的方法是按照我的要求,只需将 list 传递给适配器类即可。 - Lalit Poptani
显示剩余6条评论

0

看起来你正在将两个值一起显示为单个字符串,所以你可以通过以下方式轻松实现:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.id.text1);
for(String key : map.keySet()){
    adapter.add(key + " " + map.get(key));
}
yourListView.setAdapter(adapter);

我认为最好的答案是,他将两个元素显示为一个字符串。否则,扩展到自定义适配器是他最好的选择。 - waqaslam
我已经通过自定义适配器在listView中打印了内容。但是在listView中只显示了“视频”。但我想要打印出地图中的所有内容。已经在getview方法中编写的代码如下所示: - Android Boy
整数 key_name; key_name = map.get(name); className.setText(name.toString()); 这里的 className 是 TextView。 - Android Boy

0

构建一个自定义适配器,使用您的HashMap并...

每当您想要在ListView中处理视图时,您需要创建一个自定义适配器来处理您的逻辑实现,并根据需要将该信息传递给视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接