Android - удаление элемента из ListView при длительном нажатии

У меня возникают проблемы при попытке удалить элемент из списка с длинным кликом. Ниже приведен код:

public class MListViewActivity extends ListActivity {

private ListView lv;
private String[] some_data = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    some_data = getResources().getStringArray(R.array.mdata);

    // Bind resources Array to ListAdapter
    ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this,
            R.layout.list_item, R.id.label, some_data);
    this.setListAdapter(myAdapter);

    lv = getListView();
    lv.setDividerHeight(3);

    lv.setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int arg2, long arg3) {

            // Can't manage to remove an item here

            return false;
        }
    });
}

Любая помощь приветствуется

Ответ 1

Нельзя использовать Arrays, вы должны использовать ArrayList для удаления и добавления элементов в Listview.

После объявления размера массива вы можете изменять данные в конкретном индексе, но не можете удалить элементы или добавить к ним.

Итак, возьмите ArrayList и просто, когда вы долго нажимаете на элемент ListView, просто вызовите метод удаления Arraylist и сообщите об изменении набора данных.

Пример:

ArrayList<String> al = new ArrayList<String>();

внутри вашего longclick напишите приведенный ниже код, чтобы удалить элемент.

al.remove(arg2);//where arg2 is position of item you click
myAdapter.notifyDataSetChanged();

Ответ 2

попробовать

lv.setOnItemLongClickListener(new OnItemLongClickListener() {

    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view,
            int position, long arg3) {

              myAdapter.remove(some_data[position]);
              myAdapter.notifyDataSetChanged();

        return false;
    }

});

Ответ 3

У меня возникли проблемы с использованием этого метода. и я решил это, используя это.

            listStat.remove(listStat.get(arg2));
            lvStat.requestLayout();
            adapterStat.notifyDataSetChanged();

Я думаю, что это поможет другим.