我想在长按时删除 ListView 上的项目

Posted

技术标签:

【中文标题】我想在长按时删除 ListView 上的项目【英文标题】:I want to delete items on ListView when longpressed 【发布时间】:2016-09-07 21:45:06 【问题描述】:

我想在长按时删除 listView 上的项目。在此代码中,您可以使用 Button 添加(使用edittext)列表项,如下所示。

我无法编写长按删除它们的代码。我该怎么办?

理想情况下,长按会弹出一个菜单,用户可以触摸和删除他们想要的部分。

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    editText = (EditText) findViewById(R.id.editText);
    addButton = (Button) findViewById(R.id.addButton);
    listView = (ListView) findViewById(R.id.listView);
    listItems = new ArrayList<String>();
    listItems.add("First Item - added on Activity Create");
    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, listItems);
    listView.setAdapter(adapter);
    addButton.setOnClickListener(new View.OnClickListener() 

        public void onClick(View v) 
            listItems.add(editText.getText().toString());
            adapter.notifyDataSetChanged();
        
    );
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position,
                                long id) 
            Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_LONG)
                    .show();
        
    );

【问题讨论】:

【参考方案1】:

试试这个:

listView.setOnItemLongClickListener(new OnItemLongClickListener() 

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

              adapter.remove(data[position]);//position of the item you click
              adapter.notifyDataSetChanged();

        return false;
    

);

【讨论】:

【参考方案2】:

你可以用动画来做到这一点:

listView.setOnItemLongClickListener(new OnItemLongClickListener() 

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

              adapter.remove(data[position]);//position of the item you click
              adapter.notifyItemRemoved(position);

        return false;
    

);

【讨论】:

【参考方案3】:

在长按时删除列表视图项目,当您从列表视图中删除任何项目时,它应该显示警报对话框

listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() 
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) 

            removeItemFromList(position);
            return true;
        

        private void removeItemFromList(int position) 

            final int deletePosition = position;

            AlertDialog.Builder alert = new AlertDialog.Builder(
                    this);

            alert.setTitle("Delete");
            alert.setMessage("Do you want delete this item?");
            alert.setPositiveButton("YES", new DialogInterface.OnClickListener() 
                @Override
                public void onClick(DialogInterface dialog, int which) 
                    // TOD O Auto-generated method stub

                    // main code on after clicking yes
                    songsList.remove(deletePosition);
                    songAdapter.notifyDataSetChanged();
                    songAdapter.notifyDataSetInvalidated();

                
            );
            alert.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() 
                @Override
                public void onClick(DialogInterface dialog, int which) 
                    // TODO Auto-generated method stub
                    dialog.dismiss();
                
            );

            alert.show();
        

【讨论】:

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

如何使用选择器在长按时“永久”突出显示 ListView 行,但在正常按下时短暂显示

我想在滚动时在列表视图中添加 500 张图像,并删除当前不在屏幕上的项目

将 headerView 添加到小部件上的小部件中的 listView 调整大小 android

Edittext 在长按时进行选择但不显示上下文菜单?

如果嵌入在容器视图中,didSelectRowAtIndexPath 仅在长按时有效[重复]

单击 ListView 上的删除按钮后删除 ListView 上的项目