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
相关产品推荐
相关产品推荐

