android - 长按从 ListView 中删除项目

Posted

技术标签:

【中文标题】android - 长按从 ListView 中删除项目【英文标题】:android - removing item from ListView on long click 【发布时间】:2012-12-29 17:16:01 【问题描述】:

我在尝试通过长按从列表视图中删除项目时遇到了一些问题。下面是代码:

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

感谢任何帮助

【问题讨论】:

更具体。错误、堆栈跟踪、什么不起作用、什么不能管理? 除了@TNR 的回答之外,如果您的应用程序developer.android.com/guide/topics/ui/menus.html#context-menu 中有一个操作栏,您应该考虑使用它 【参考方案1】:

你不应该使用Arrays,你应该使用ArrayList来删除和添加项目到Listview

声明数组大小后,您可以修改特定索引中的数据,但不能删除或添加项目。

所以取一个ArrayList,当你长按ListView Item时,调用Arraylist的remove方法,通知数据集发生变化。

例子:

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;
    

);

【讨论】:

抛出 UnsupportedOperationException 正是我一直在寻找的。如果您使用 ListView 或其任何子类,请使用上面的方法从列表中获取持有的项目【参考方案3】:
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;
    
);

【讨论】:

【参考方案4】:

我在使用这种方法时遇到了问题。我用这个解决了它。

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

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

【讨论】:

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

以上是关于android - 长按从 ListView 中删除项目的主要内容,如果未能解决你的问题,请参考以下文章

长按 ListView 项目的 Android onCreateContextMenu 致命异常

android studio listview长按删除

Android:如何在listView上的项目中结合滑动手势和长按

android的ListView中如何设置长按Item的时候该Item背景变色

android中的listview当长按事件触发后怎么接着触发点击事件。。。

android Fragment下的listview 怎么样可以设置单击事件和长按事件