Как динамически удалять элементы из списка ListView при нажатии кнопки?
Я работаю над приложением, которое требует удалить элементы из ListView
в событие кнопки.
Я попытался удалить его из ArrayList
и создать весь новый адаптер и снова загрузить список, но поскольку мой список огромен, это повлияет на производительность моего приложения, поэтому мне было интересно, есть ли другой способ, с помощью которого я мог бы удалить элемент из моего списка динамически?
Я пробовал все, что вы сказали, ребята.
Сначала я просто попытался удалить один элемент, и он работал идеально, но по мере увеличения количества выбранных элементов он начинает давать мне IndexOutOfBoundException.
Здесь мой код: -
public void onClick(View view)
{
SparseBooleanArray checkedPositions = new SparseBooleanArray();
checkedPositions.clear();
checkedPositions = lv.getCheckedItemPositions();
int size = checkedPositions.size();
if(size != 0)
{
for(int i = 0; i <= size; i++)
{
if(checkedPositions.valueAt(i))
{
list.remove(notes.getItem(checkedPositions.keyAt(i)));
notes.notifyDataSetChanged();
}
}
}
else{}
}
Здесь примечания относятся к объекту SimpleAdapter.
Ответы
Ответ 1
Ну, вы просто удалите нужный элемент из списка, используя метод remove()
вашего ArrayAdapter
.
Возможный способ сделать это:
Object toRemove = arrayAdapter.getItem([POSITION]);
arrayAdapter.remove(toRemove);
Другой способ - изменить ArrayList
и вызвать notifyDataSetChanged()
на ArrayAdapter
.
arrayList.remove([INDEX]);
arrayAdapter.notifyDataSetChanged();
Ответ 2
Это сработало для меня. Надеюсь, это поможет кому-то.:)
SimpleAdapter adapter = (SimpleAdapter) getListAdapter();
this.resultsList.remove((int) info.id);
adapter.notifyDataSetChanged();
Ответ 3
adapter.remove(arraylist.get(position));
adapter.notifyDataSetChanged();
или вы можете снова позвонить
setListAdapter(adapter)
Ответ 4
У вас есть кнопка в списке и пусть функция onclick в xml, чтобы начать публикацию
public void OnClickButton(View V){
final int postion = listView.getPositionForView(V);
System.out.println("postion selected is : "+postion);
Delete(postion);
}
public void Delete(int position){
if (adapter.getCount() > 0) {
//Log.d("largest no is",""+largestitemno);
//deleting the latest added by subtracting one 1
comment = (GenrricStoring) adapter.getItem(position);
//Log.d("Deleting item is: ",""+comment);
dbconnection.deleteComment(comment);
List<GenrricStoring> values = dbconnection.getAllComments();
//updating the content on the screen
this.adapter = new UserItemAdapter(this, android.R.layout.simple_list_item_1, values);
listView.setAdapter(adapter);
}
else
{
int duration = Toast.LENGTH_SHORT;
//for showing nothing is left in the list
Toast toast = Toast.makeText(getApplicationContext(),"Db is empty", duration);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
Ответ 5
List<String> entries;
private ArrayAdapter<String> categoryAdapter;
//Your list of entries {Example: <"category1","category2","category3">}
entries = new ArrayList<String>();
categoryAdapter = new ArrayAdapter<String>(ViewBeaconsActivity.this,
android.R.layout.simple_list_item_1, entries);
//Remove that specific category from the list
entries.remove(categoryName);
//Notify the adapter that your dataset has changed.
categoryAdapter.notifyDataSetChanged();
Ответ 6
Вы можете удалить элемент из списка, например:
или вы можете выбрать на своем событии Button, который должен быть удален.
public class Third extends ListActivity {
private ArrayAdapter<String> adapter;
private List<String> liste;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
liste = new ArrayList<String>();
Collections.addAll(liste, values);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, liste);
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
liste.remove(position);
adapter.notifyDataSetChanged();
}
}
Ответ 7
Что касается вашего последнего вопроса, здесь проблема проиллюстрирована простым примером:
Скажем, что ваш список содержит 5 элементов: list = [1, 2, 3, 4, 5]
и ваш список элементов для удаления (т.е. индексы) indices_to_remove = [0, 2, 4]
. На первой итерации цикла вы удаляете элемент с индексом 0, поэтому ваш список становится list = [2, 3, 4, 5]
. Во второй итерации вы удаляете элемент по индексу 2, поэтому ваш список становится list = [2, 3, 5]
(как вы можете видеть, это удаляет неправильный элемент). Наконец, на третьей итерации вы пытаетесь удалить элемент по индексу 4, но список содержит только три элемента, поэтому вы получаете исключение за пределами.
Теперь, когда вы видите, в чем проблема, надеюсь, вы сможете придумать решение. Удачи!
Ответ 8
private List<DataValue> datavalue=new ArrayList<Datavalue>;
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
datavalue.remove(position);
notifyDataSetChanged();
}
});
}
}
Ответ 9
<ImageView
android:id="@+id/btnDelete"
android:layout_width="35dp"
android:layout_height="match_parent"
android:layout_alignBottom="@+id/editTipo"
android:layout_alignParentRight="true"
android:background="@drawable/abc_ic_clear"
android:onClick="item_delete_handler"/>
И создайте Event item_delete_handler,