You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何实现点击按钮进入删除模式并删除联系人功能?

你完全不需要单独创建Remove_Contact类,仅在现有代码基础上做少量修改即可实现需求,步骤如下:

步骤1:修改MainActivity逻辑

首先新增删除模式状态标记,改移除按钮的点击逻辑为切换删除模式,不再跳转到新页面:

public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;
    ArrayList<ContactModel> arrayList = new ArrayList<>();
    MainAdapter adapter;
    // 新增:删除模式状态标记
    boolean isDeleteMode = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = findViewById(R.id.recycler_view);
        checkPermission();
    }

    private void checkPermission() {
        // 新增:申请写入联系人权限,删除操作需要该权限
        if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED
            || ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS}, 100);
        }else{
            getContactList();
        }

        Button add_btn = findViewById(R.id.add_btn);
        add_btn.setOnClickListener(v -> startActivity(new Intent(MainActivity.this, Add_Contact.class)));

        Button rem_btn = findViewById(R.id.rem_btn);
        // 修改:移除按钮点击改为切换删除模式
        rem_btn.setOnClickListener(v -> {
            isDeleteMode = !isDeleteMode;
            adapter.setDeleteMode(isDeleteMode);
            rem_btn.setText(isDeleteMode ? "退出删除" : "移除联系人");
        });
    }

    // 新增:删除联系人方法,供Adapter回调调用
    public void deleteContact(ContactModel contact) {
        new AlertDialog.Builder(this)
                .setTitle("确认删除")
                .setMessage("确定要删除联系人「" + contact.getName() + "」吗?")
                .setPositiveButton("确定", (dialog, which) -> {
                    // 删除系统联系人
                    ContentResolver contentResolver = getContentResolver();
                    String where = ContactsContract.RawContacts.CONTACT_ID + " = ?";
                    String[] params = new String[]{String.valueOf(contact.getId())};
                    contentResolver.delete(ContactsContract.RawContacts.CONTENT_URI, where, params);
                    // 更新本地列表
                    arrayList.remove(contact);
                    adapter.notifyDataSetChanged();
                })
                .setNegativeButton("取消", null)
                .show();
    }

    // 原有getContactList()方法保持不变,仅修改初始化Adapter的逻辑
    private void getContactList() {
        // 原有获取联系人的逻辑不变...
        // 初始化Adapter时传入点击回调
        adapter = new MainAdapter(arrayList, this::deleteContact);
        recyclerView.setAdapter(adapter);
    }
}

步骤2:修改MainAdapter逻辑

新增删除模式状态和点击回调接口,根据状态切换列表项样式和点击逻辑:

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> {
    private ArrayList<ContactModel> arrayList;
    // 新增:删除模式标记
    private boolean isDeleteMode = false;
    // 新增:点击回调接口
    private OnItemClickListener listener;

    public interface OnItemClickListener {
        void onItemClick(ContactModel contact);
    }

    // 修改构造方法,传入回调
    public MainAdapter(ArrayList<ContactModel> arrayList, OnItemClickListener listener) {
        this.arrayList = arrayList;
        this.listener = listener;
    }

    // 新增:提供修改删除模式的方法
    public void setDeleteMode(boolean deleteMode) {
        isDeleteMode = deleteMode;
        notifyDataSetChanged();
    }

    // 原有onCreateViewHolder逻辑不变...

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        ContactModel contact = arrayList.get(position);
        holder.nameTv.setText(contact.getName());
        holder.phoneTv.setText(contact.getPhone());

        // 新增:删除模式下修改列表项背景色,可自行调整色值
        holder.itemView.setBackgroundColor(isDeleteMode ? Color.parseColor("#FFF3CD") : Color.WHITE);

        // 新增:列表项点击逻辑
        holder.itemView.setOnClickListener(v -> {
            if (isDeleteMode && listener != null) {
                listener.onItemClick(contact);
            } else {
                // 原有正常点击逻辑(比如查看联系人详情)保留在此处,无相关逻辑可留空
            }
        });
    }

    // 原有getItemCount逻辑不变...
    // 原有ViewHolder类定义不变...
}

步骤3:补充清单文件权限

在AndroidManifest.xml中添加写入联系人权限:

<uses-permission android:name="android.permission.WRITE_CONTACTS" />

修改完成后即可实现需求:点击移除按钮进入删除模式,列表项变黄,点击任意联系人弹出确认删除弹窗,删除后自动刷新列表,再次点击移除按钮可退出删除模式。

你的原界面参考:
联系人列表

内容的提问来源于stack exchange,提问作者André_Almeida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 18:54:02