如何从Android中的StartActivityforResult返回类的HashSet

时间:2015-12-27 17:44:06

标签: java android android-activity android-contacts hashset

我试图返回包含多个值的Set<Person> checkedlist = new HashSet<>();来创建像

这样的人
Person human = new Person(allcontacts.getName(), allcontacts.getPhone());

然后使用checkedlist.add(PersonVariable);将该人添加到其中。

之后,我想用checkedlist(hashset)返回intent。我不确定是否有更简单的方法可供使用。我在其他人的帮助下试图做的是Person类工具Serializable,然后我用returnIntent.putExtra("result", (Serializable) checkedlist);

返回意图

现在我认为这是我的应用程序崩溃的地方:原始类中的onActivityResult

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){

            Set<Person> myObject = (HashSet) data.getParcelableExtra("result");
            for (Person checkedthem : myObject) {
                    Person human = new Person(checkedthem.getName(), checkedthem.getPhone());
                    persons.add(human);
                    BetterDisplay(human);
            }
        }
        if (resultCode == Activity.RESULT_CANCELED) {
        }
    }
}

我认为我必须使用for循环并浏览所有不同的结果和联系人,但我不确定是否有更好或更简单的方法,或者我无法使用{{ 1}}并且需要找出一种方法将我的数据放在一个不同的变量中供原始类使用。

如果您需要更多信息,我认为问题出在那里:

首先,如果需要,可以使用完全结束弹出类的方法

HashSet

其次,列表变量在类的开头创建为public void registerDoneClick(View view) { Intent returnIntent = new Intent(); Set<Person> checkedlist = new HashSet<>(); for (Person allcontacts : list) { if(allcontacts.isSelected()) { Person checkedthem = new Person(allcontacts.getName(), allcontacts.getPhone()); checkedlist.add(checkedthem); } } returnIntent.putExtra("result", (Serializable) checkedlist); setResult(Activity.RESULT_OK, returnIntent); finish(); } 并填充:

ArrayList<Person> list = new ArrayList<>();

最后,我通过检查

通过try { Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);` `while (phones.moveToNext()) { String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Person allcontacts = new Person(name, phoneNumber); list.add(allcontacts); } phones.close(); } catch (Exception e){ e.printStackTrace(); } 收到所有复选框
listAdapter

,整个方法是

        CheckBox cb = (CheckBox)itemView.findViewById(R.id.checkBox);
        cb.setTag(position);

        if (cb.isChecked()) {
            currentperson.setSelected(true);
        }

任何帮助都会受到赞赏,我已经在这个问题上坚持了很长一段时间。谢谢!

0 个答案:

没有答案