【问题标题】:How shall I iterate in BaseAdapter getView() if I use HashMap如果我使用 HashMap,我将如何在 BaseAdapter getView() 中进行迭代
【发布时间】:2011-03-08 19:33:29
【问题描述】:

我有一个来自 BaseAdapter 的扩展类,它用作我的 ListView 的自定义 Adapter。如果我使用List<> 作为数据集,我在getView() 方法中没有任何问题并且一切正常——我的列表中填充了来自List 的所有数据。但如果我使用HashMap,这永远不会奏效。据我了解getView() 遍历集合,这适用于List,因为它是可迭代的。

private class MAdapter extends BaseAdapter {
        private LayoutInflater mInflater;

        public MAdapter(Context context) {
            mInflater = LayoutInflater.from(context);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;

            if (v == null) {
                v = mInflater.inflate(R.layout.list_item, null);
            }

            Task task = taskList.get(position); // works perfect if taskList is List and doesn't work if it is HashMap. What shell I do to use HashMap here?

            if (task != null) {
                TextView tvDescription = (TextView) v
                        .findViewById(R.id.task_text_view);
                TextView tvTime = (TextView) v
                        .findViewById(R.id.time_text_view);

                if (tvDescription != null) {
                    tvDescription.setText(task.getDescription());
                }

                if (tvTime != null) {
                    tvTime.setText(task.showTime());
                }
            }

            return v;
        }

【问题讨论】:

标签: android


【解决方案1】:

你不能。 BaseAdapter 实现了 ListAdapter,它被称为 ListAdapter 是有原因的。为什么要使用 HashMap?

更新:

从列表中删除。

for(int j = list.size() - 1; j >= 0; j--){
  Object o = list.get(j);
  if(o.getId().equals(id)) {
    list.remove(o); // find obj and remove
    break;
  }
}
adapter.notifyDataSetChanged(); // update ListView

或者同时保留一个列表和 HashMap。我建议只使用列表。

Object o = map.remove(id); // remove object by id
list.remove(o); // remvove object from list
adapter.notifyDataSetChanged(); // update ListView

【讨论】:

  • 因为我需要通过它的 ID 从集合中删除一个对象,最好的方法是使用 HashMap 而不是 List。
  • 只需像我的示例一样迭代列表并删除它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 2011-05-22
  • 2016-01-08
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多