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

任何帮助表示赞赏

4

4 回答 4

15

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

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

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

例子:

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

在您的 longclick 中编写以下代码以删除项目。

al.remove(arg2);//where arg2 is position of item you click
myAdapter.notifyDataSetChanged();
于 2013-01-15T15:07:49.733 回答
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;
    }

});
于 2013-01-15T15:10:08.390 回答
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;
    }
});
于 2022-02-08T20:43:51.160 回答
-1

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

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

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

于 2017-04-23T05:59:06.233 回答