安卓 - 长按删除ListView中的项目

11

当我尝试在列表视图上长按删除一个项目时,遇到了一些问题。以下是代码:

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;
        }
    });
}

任何帮助都是受欢迎的


请更具体地描述问题。错误信息、堆栈跟踪、哪些功能无法正常工作,您无法管理什么? - jlindenbaum
1
如果您的应用程序中有操作栏,建议参考以下链接http://developer.android.com/guide/topics/ui/menus.html#context-menu并结合@TNR的答案。 - Khaled Annajar
4个回答

15

不应该使用Arrays,而应该使用ArrayList来添加和移除Listview中的项目。

一旦数组大小被声明,你可以修改特定索引处的数据,但不能删除或添加项目。

因此,使用ArrayList,当你长按ListView项时,只需调用Arraylist的remove方法并通知数据集更改。

示例:

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

在你的长按事件中加入以下代码以移除该项。

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

12

尝试

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;
    }

});

抛出 UnsupportedOperationException。 - Droidman
正是我所需要的。如果您正在使用ListView或其任何子类,请使用上述方法从列表中获取所持有的项目。 - Clocker

0
itemAdapter = new ArrayAdapter<String>(
        view.getContext(),
        androidx.appcompat.R.layout.support_simple_spinner_dropdown_item,
        itemViewModel.getItems().getValue().stream().map(TaskCard::getTitle).collect(Collectors.toList())
);
ListView listview = view.findViewById(R.id.item_listview);
listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int i, long l) {
        itemAdapter.remove(itemAdapter.getItem(i));
        return true;
    }
});

0

我在使用这个方法时遇到了问题,但是我通过以下方式解决了它。

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

我认为这会对其他人有所帮助。


我遇到了类似的问题。你代码中的lvStat是什么? - coderpc
@pc 列表视图参考 - Borshon saydur rahman
我在我的ListView中有VideoViewImageViewTextView。它适用于ImageViewTextView,但不适用于VideoView - coderpc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接