Android Studio中如何在不同Activity之间传递选中的联系人数据
双Activity传递选中联系人列表实现方案
你直接在第二个Activity初始化空ArrayList无法拿到数据是因为不同Activity的内存空间相互独立,默认无法直接共享变量,需要通过Android官方的Intent传值机制实现数据传递,具体实现步骤如下:
前提说明
MultiContactPicker提供的ContactResult类默认已经实现了Parcelable序列化接口,可以直接通过Intent传递列表,无需额外处理。
第一步:修改首个Activity的onActivityResult逻辑
拿到选中联系人列表后,将其封装到Intent中跳转至第二个Activity:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == CONTACT_PICKER_REQUEST){ if(resultCode == RESULT_OK) { List<ContactResult> results = MultiContactPicker.obtainResult(data); Log.d("MyTag", results.get(0).getDisplayName()); // 新增跳转传值逻辑 Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putParcelableArrayListExtra("selected_contacts", new ArrayList<>(results)); startActivity(intent); } else if(resultCode == RESULT_CANCELED){ System.out.println("User closed the picker without selecting items."); } } }
第二步:第二个Activity接收联系人列表
在发短信的Activity的onCreate方法中接收传递过来的列表:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); List<ContactResult> selectedContacts = new ArrayList<>(); // 接收数据 if(getIntent() != null && getIntent().hasExtra("selected_contacts")){ selectedContacts = getIntent().getParcelableArrayListExtra("selected_contacts"); } // 测试打印验证数据 for (ContactResult contact : selectedContacts) { Log.d("短信页", "联系人:" + contact.getDisplayName() + " 手机号:" + contact.getPhoneNumbers()); } // 后续可直接使用selectedContacts实现发短信逻辑 }
可选简化方案:仅传递手机号列表
如果后续逻辑只需要用到手机号,也可以仅提取手机号列表传递,减少传输数据量:
- 首个Activity传值代码:
ArrayList<String> phoneList = new ArrayList<>(); for (ContactResult result : results) { // 单个联系人可能存在多个手机号,可根据需求筛选后添加 phoneList.addAll(result.getPhoneNumbers()); } Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putStringArrayListExtra("phone_list", phoneList); startActivity(intent);
- 第二个Activity接收代码:
ArrayList<String> phoneList = getIntent().getStringArrayListExtra("phone_list");
内容的提问来源于stack exchange,提问作者siyar
相关产品推荐
相关产品推荐

