【问题标题】:android - removing item from ListView on long clickandroid - 长按从 ListView 中删除项目
【发布时间】:2023-03-18 08:34: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;
        }
    });
}

感谢任何帮助

【问题讨论】:

标签: android android-listview android-arrayadapter


【解决方案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
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 2012-06-22
      • 2011-02-03
      • 1970-01-01
      相关资源
      最近更新 更多