Android:如何从listView和arrayAdapter中删除项目

时间:2011-01-15 06:51:09

标签: android listview arraylist

我有一个ArrayList中的项集合。我将它们添加到客户适配器,如下所示:

this.m_adapter = new MyAdapter(this, R.layout.myitem,
    itemCart.m_items);

我的列表中的每个项目都有一个删除按钮,但我不知道如何将删除按钮的onClick()与ArrayList中的原始项目连接起来。有人可以解释如何做到这一点或指向我的教程,我可以阅读这个?非讽刺/非居高临下的回应非常感谢。

9 个答案:

答案 0 :(得分:26)

您可以在remove()

上调用ArrayList方法
itemCart.m_items.remove(<index of element to remove>);
this.m_adapter.notifyDataSetChanged();

然后您需要在适配器上调用notifyDataSetChanged();来更新ListView

答案 1 :(得分:7)

到目前为止,这是我的解决方案:

getView()方法中,我做了类似的事情:

deleteButton.setTag(position);

看起来getTag()返回一个Object。所以我首先将位置int转换为Integer对象。它似乎有效。

OnClickListener()我执行以下操作:

items.remove(index.intValue());

到目前为止,非常好。

答案 2 :(得分:7)

您可以通过简单地注意到列表视图是子视图的集合(列表的行)来获取元素的索引。

您可以在代码中执行以下操作:

(例如在getView()方法内部)

row.setOnLongClickListener(new OnLongClickListener() 
{
    @Override
    public boolean onLongClick(View view) {
        remove(listView.indexOfChild(view));
        return true;
    }
}

也就是说,解决方案只是使用indexOfChild(View)方法来获取用户(长)按下的子视图的索引。

答案 3 :(得分:3)

以下为我效劳:

/* Read values from resource into an array */
String[] strColorValues =  getResources().getStringArray(R.array.colors);

ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < strColorValues.length; i++) {
    list.add(strColorValues[i]);
}

ArrayAdapter adapterColors = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, list);

adapterColors.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinnerColors.setAdapter(adapterPermissionLevels);
spinnerColors.setOnItemSelectedListener(this);

/* Remove first element from the adapter and notify dataset changed. */
String item = spinnerColors.getItemAtPosition(0).toString();
adapterColors.remove(item);
adapterColors.notifyDataSetChanged();

答案 4 :(得分:1)

这是我的代码。

  transfer.setItemPosition(position, items.get(position).getAddMode());

这里的转移是主类的实例。每次我点击删除按钮,然后它会传递该行列表中该项目的位置。

  public View getView(final int position, View convertView, ViewGroup parent) {
            View v = convertView;
          if (v == null) {
              final Context context = getContext();
                    LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.listviewitem_layout, null);
          }

          ItemEntry item = items.get(position);
          if (item != null) {
                    TextView textViewName = (TextView) v.findViewById(R.id.textViewItemName);
                    ImageView imageViewDelete = (ImageView) v.findViewById(R.id.imageViewDeleteIcon);

                    imageViewDelete.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {                   
                                transfer.showDialog(4);                             
                                transfer.setItemPosition(position, items.get(position).getAddMode());
                        }
                  });

          if (textViewName != null) {
                    textViewName.setText(item.getItemName());
          }

          if(imageViewDelete != null) {
              imageViewDelete.setImageResource(R.drawable.delete);
          }
      }
      return v;
        }
}

答案 5 :(得分:1)

按职位删除:

mainAdapter.remove(mainAdapter.getItem(position));

如最后一个:

mainAdapter.remove(mainAdapter.getItem(mainAdapter.getCount() - 1));

答案 6 :(得分:0)

如果您使用上下文菜单,那么您可以获得 AdapterContextMenuInfo和这个结构给出了被点击元素的索引和id。

答案 7 :(得分:0)

您似乎可以按如下方式获取ListView中单击项目的索引(或位置):

listview.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        listview.remove(listview.getItem(position).toString());
    }
}

因此,您需要侦听Views上的点击,然后从中获取索引。

答案 8 :(得分:0)

尝试这些行代码对我很有帮助

holder.image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            list.remove(position);
            notifyItemRemoved(position);
            notifyItemRangeChanged(position, list.size());
        }
    });