• Android | ListView 长按删除列表项【学习笔记】


    目录

            一、效果

            二、核心代码

            三、全部代码

            四、源码下载


    一、效果

    二、核心代码

    • 监听器 - 长按弹出对话框 AdapterView.OnItemLongClickListener
    1. private final AdapterView.OnItemLongClickListener itemDeleteListener = new AdapterView.OnItemLongClickListener() {
    2. @Override
    3. public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) {
    4. // 确认删除对话框构建
    5. AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    6. builder.setMessage("确认删除?");
    7. // 点击对话框的 确认 按钮后的操作
    8. builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    9. @Override
    10. public void onClick(DialogInterface dialog, int which) {
    11. numList.remove(position); // 从 numList 中删除点击的列表项
    12. adapter.notifyDataSetChanged(); // 适配器数据刷新
    13. Toast.makeText(getBaseContext(), "已删除", Toast.LENGTH_SHORT).show();
    14. }
    15. });
    16. // 点击对话框的 取消 按钮后的操作
    17. builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    18. @Override
    19. public void onClick(DialogInterface dialog, int which) {
    20. // 无操作
    21. }
    22. });
    23. builder.create().show();
    24. return false;
    25. }
    26. };
    • 绑定监听器
    1. // 绑定监听器
    2. listView.setOnItemLongClickListener(itemDeleteListener);

    三、全部代码

    1、XML

    • activity_main.xml
    1. "1.0" encoding="utf-8"?>
    2. <RelativeLayout
    3. xmlns:android="http://schemas.android.com/apk/res/android"
    4. xmlns:tools="http://schemas.android.com/tools"
    5. android:layout_width="match_parent"
    6. android:layout_height="match_parent"
    7. tools:context=".MainActivity">
    8. <ListView
    9. android:id="@+id/num_list"
    10. android:layout_width="match_parent"
    11. android:layout_height="match_parent"/>
    12. RelativeLayout>
    • item.xml
    1. "1.0" encoding="utf-8"?>
    2. <RelativeLayout
    3. xmlns:android="http://schemas.android.com/apk/res/android"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent">
    6. <TextView
    7. android:id="@+id/item_number"
    8. android:layout_width="wrap_content"
    9. android:layout_height="wrap_content"
    10. android:layout_margin="20dp"
    11. android:layout_centerHorizontal="true"
    12. android:text="number"
    13. android:textSize="30sp" />
    14. RelativeLayout>

    2.Java

    • MainActivity.java
    1. import android.content.DialogInterface;
    2. import android.os.Bundle;
    3. import android.view.View;
    4. import android.widget.AdapterView;
    5. import android.widget.ListView;
    6. import android.widget.Toast;
    7. import androidx.appcompat.app.AlertDialog;
    8. import androidx.appcompat.app.AppCompatActivity;
    9. import java.util.ArrayList;
    10. public class MainActivity extends AppCompatActivity {
    11. private final String[] num = new String[]{"1", "2", "3", "4", "5", "6", "7", "8"};
    12. private ArrayList numList;
    13. private Adapter adapter;
    14. /**
    15. * 长按删除列表项
    16. */
    17. private final AdapterView.OnItemLongClickListener itemDeleteListener = new AdapterView.OnItemLongClickListener() {
    18. @Override
    19. public boolean onItemLongClick(AdapterView parent, View view, final int position, long id) {
    20. // 长按列表项的时候弹出 确认删除对话框
    21. AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    22. builder.setMessage("确认删除?");
    23. // 点击对话框的 确认 按钮后的操作
    24. builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
    25. @Override
    26. public void onClick(DialogInterface dialog, int which) {
    27. numList.remove(position); // 从 numList 中删除点击的列表项
    28. adapter.notifyDataSetChanged(); // 适配器数据刷新
    29. Toast.makeText(getBaseContext(), "已删除", Toast.LENGTH_SHORT).show();
    30. }
    31. });
    32. // 点击对话框的 取消 按钮后的操作
    33. builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    34. @Override
    35. public void onClick(DialogInterface dialog, int which) {
    36. // 无操作
    37. }
    38. });
    39. builder.create().show();
    40. return false;
    41. }
    42. };
    43. @Override
    44. protected void onCreate(Bundle savedInstanceState) {
    45. super.onCreate(savedInstanceState);
    46. setContentView(R.layout.activity_main);
    47. ListView listView = findViewById(R.id.num_list);
    48. numList = new ArrayList<>();
    49. for (int i = 0; i < num.length; i++) {
    50. numList.add(num[i]);
    51. }
    52. adapter = new Adapter(MainActivity.this, R.layout.item, numList);
    53. listView.setAdapter(adapter);
    54. listView.setOnItemLongClickListener(itemDeleteListener);
    55. }
    56. }
    • Adapter.java
    1. import android.content.Context;
    2. import android.view.LayoutInflater;
    3. import android.view.View;
    4. import android.view.ViewGroup;
    5. import android.widget.ArrayAdapter;
    6. import android.widget.TextView;
    7. import java.util.List;
    8. public class Adapter extends ArrayAdapter {
    9. private final int resourceId;
    10. private static class ViewHolder {
    11. TextView tvNum;
    12. }
    13. public Adapter(Context context, int resourceId, List data) {
    14. super(context, resourceId, data);
    15. this.resourceId = resourceId;
    16. }
    17. @Override
    18. public View getView(int position, View convertView, ViewGroup parent) {
    19. String num = getItem(position);
    20. final ViewHolder viewHolder;
    21. View view;
    22. if (convertView == null) {
    23. view = LayoutInflater.from(getContext()).inflate(resourceId, parent, false);
    24. viewHolder = new ViewHolder();
    25. viewHolder.tvNum = view.findViewById(R.id.item_number);
    26. view.setTag(viewHolder);
    27. } else {
    28. view = convertView;
    29. viewHolder = (ViewHolder) view.getTag();
    30. }
    31. viewHolder.tvNum.setText(num);
    32. return view;
    33. }
    34. }

    四、源码下载

             ListView长按删除列表项

  • 相关阅读:
    linux 进程组和会话和线程
    怎么给字符串字段加索引?
    Java数据结构之深度解析二叉树
    MFC Windows 程序设计[224]之双列表拾取器(附源码)
    妇科检查,到底查什么?
    完工尚需绩效指数(TCPI)
    BQL是什么如何使用?
    MySQL中大量数据优化方案
    Linux驱动开发(二)---驱动与设备的分离设计
    InnoDB 与 MyISAM的比较(含其他存储引擎)
  • 原文地址:https://blog.csdn.net/sun80760/article/details/126561652