java - 从 Android 中的 StartActivityForResult 返回一个类

标签 java android android-activity android-contacts hashset

我启动了一项 Activity ,从手机上的所有联系人列表中获取联系人。现在我的问题是如何从 ListView 中正确地将选定的检查直接返回到我的 Person 类中。我并不完全理解 Intent 和 Activity 的一般概念,所以请耐心等待。

这是我如何从 MainActivity.java 启动 Activity

static final int PICK_CONTACT_REQUEST = 1;
public void grabthecontacts(View view) {
    Intent intent = new Intent(getApplicationContext(), SelectContactsActivity.class);
    startActivityForResult(intent, 1);
}


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

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
        }
    }
}

这是它调用的类,选择联系人 Activity

    package com.example.android.smsapp;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.app.Activity;
import android.provider.ContactsContract;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class SelectContactsActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_select_contacts);
        populateListView();
        Button SubmitButton = (Button) findViewById(R.id.submitbut);

        SubmitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                registerDoneClick(view);
            }
        });

    }
    ArrayList<Person> list = new ArrayList<>();
    Set<Person> checkedlist = new HashSet<>();

    public void populateListView() {
        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();
        }


        ListView listview2 = (ListView) findViewById(R.id.contactlistview);
        ArrayAdapter<Person> adapter = new myListAdapter();
        listview2.setAdapter(adapter);
        listview2.setItemsCanFocus(false);
        listview2.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    }

    public class myListAdapter extends ArrayAdapter<Person> {

        public myListAdapter() {
            super(SelectContactsActivity.this, R.layout.da_item, list);
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View itemView = convertView;
            if (itemView == null) {
                itemView = getLayoutInflater().inflate(R.layout.da_item, parent, false);
            }
            // Find person wot work with
            Person currentperson = list.get(position);

            // Fill the view
            TextView nameboxview = (TextView) itemView.findViewById(R.id.NameView);
            nameboxview.setText(currentperson.getName());

            TextView numberboxview = (TextView) itemView.findViewById(R.id.NumberView);
            numberboxview.setText(currentperson.getPhone());
            CheckBox cb = (CheckBox)itemView.findViewById(R.id.checkBox);
            cb.setTag(position);

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


            return itemView;
        }
    }

    public void registerDoneClick(View view) {
        for (Person allcontacts : list) {
            if(allcontacts.isChecked()) {
                Person human = new Person(allcontacts.getName(), allcontacts.getPhone());
            }
        }
// How do I return human with this activity? or is there another method?
        finish();
    }

}

我完全不知道如何返回我作为一个人想要的值(value)观,所以我只能这样做

hashsetname.add(human)

非常感谢任何帮助,即使是一般格式设置,或者任何 java 提示。谢谢

最佳答案

试试这个,

首先将 Person 类设为可序列化,使用

public class Person implements Serializable

现在像这样在 Intent 中设置 ivalue,

Intent returnIntent = new Intent();
returnIntent.putExtra("result", human);
setResult(Activity.RESULT_OK, returnIntent);
finish();

从 onActivityResult 方法中的 Intent 获取值,

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

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

            Person myObject = (Person) data.getParcelableExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
        }
    }
}

关于java - 从 Android 中的 StartActivityForResult 返回一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34389134/

相关文章:

java - Eclipse RCP CSS 样式导出后不起作用

java - 如何在java程序中转换sikuli脚本

android - 将 Android 应用程序与 SQLite 数据库连接时找不到表名

android - 无法理解 'Partially visible' 的含义

android - 如何从服务或警报通知 "current" Activity ?

java - Android- ActionBar AutoCompleteTextview

java - 带有 SpinnerNumberModel 的 JSpinner 总是返回值 0

android - 应用程序未显示在 4.0.3 的启动器中

android - 发生异常时的 Robospice 缓存

android - 在 Activity 之间共享菜单栏