Android: как удалить элемент из спискаView и arrayAdapter
У меня есть коллекция элементов в ArrayList. Я добавляю их к адаптеру клиента следующим образом:
this.m_adapter = new MyAdapter(this, R.layout.myitem,
itemCart.m_items);
У меня есть кнопка удаления для каждого из этих элементов в моем списке, но я не знаю, как подключить кнопку удаления onClick()
к исходному элементу в ArrayList. Может кто-нибудь объяснить, как это сделать или указать мне на учебник, где я могу это прочитать? Не оценены саркастические/не снисходительные ответы.
Ответы
Ответ 1
Здесь мое решение:
В методе getView()
я делаю что-то вроде этого:
deleteButton.setTag(position);
Похоже, что getTag()
возвращает объект. Поэтому я сначала преобразовал позицию int в объект Integer. Кажется, он работает.
В OnClickListener()
я делаю следующее:
items.remove(index.intValue());
До сих пор так хорошо.
Ответ 2
Вы можете вызвать метод remove()
на ArrayList
itemCart.m_items.remove(<index of element to remove>);
this.m_adapter.notifyDataSetChanged();
И тогда вам нужно вызвать notifyDataSetChanged();
на вашем адаптере, чтобы обновить ListView
Ответ 3
Вы можете получить индекс элемента, просто заметив, что представление списка представляет собой набор дочерних представлений (строки списка).
Вы можете сделать что-то подобное в своем коде:
(например, внутри метода getView())
row.setOnLongClickListener(new OnLongClickListener()
{
@Override
public boolean onLongClick(View view) {
remove(listView.indexOfChild(view));
return true;
}
}
То есть, решение просто использует метод indexOfChild (View), чтобы получить индекс дочернего представления, который пользователь (длинный) нажал.
Ответ 4
Следующие работы для меня:
/* 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();
Ответ 5
Здесь мой код.
transfer.setItemPosition(position, items.get(position).getAddMode());
передача здесь является экземпляром основного класса. каждый раз я нажимаю кнопку deletebutton, затем передаю позицию этого элемента в списке в этой строке.
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;
}
}
Ответ 6
Удалить по позиции:
mainAdapter.remove(mainAdapter.getItem(position));
Например, последний:
mainAdapter.remove(mainAdapter.getItem(mainAdapter.getCount() - 1));
Ответ 7
Если вы используете контекстное меню, вы можете получить
AdapterContextMenuInfo и эта структура предоставляют индекс и идентификатор элемента clicked.
Ответ 8
Кажется, что вы можете получить индекс (или позицию) щелкнутого элемента в ListView следующим образом:
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
listview.remove(listview.getItem(position).toString());
}
}
Итак, вам нужно прослушивать клики на представлениях, а затем извлекать из этого индекс.
Ответ 9
Попробуйте эти коды строк, это было очень полезно для меня
holder.image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
list.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, list.size());
}
});