在 Android 中从 StartActivityForResult 返回 class
Returning a class from StartActivityForResult in Android
我开始 activity 从 phone 上的所有联系人列表中抓取联系人。现在我的问题是如何 return 从列表视图中正确地选择检查,直接进入我的人 class。我一般不完全理解 Intents 和 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) {
}
}
}
这是它调用的 class,Select 联系人 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();
}
}
我完全不知道如何 return 作为一个人我想要的价值观,所以我可以简单地做到
hashsetname.add(human)
非常感谢任何帮助,即使是一般格式,也非常感谢任何 java 提示。谢谢
调用前添加这两行finish();
Intent returnIntent = new Intent();
setResult(Activity.RESULT_OK, returnIntent);
finish();
Intent i= new Intent();
i.putExtra("whatever",yourResult);
setResult(Activity.RESULT_OK, i);
finish();
试试这个,
首先使用
使Person class可序列化
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) {
}
}
}
我开始 activity 从 phone 上的所有联系人列表中抓取联系人。现在我的问题是如何 return 从列表视图中正确地选择检查,直接进入我的人 class。我一般不完全理解 Intents 和 Activity 的概念,所以请耐心等待。
以下是我如何从 MainActivity.java
开始 Activitystatic 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) {
}
}
}
这是它调用的 class,Select 联系人 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();
}
}
我完全不知道如何 return 作为一个人我想要的价值观,所以我可以简单地做到
hashsetname.add(human)
非常感谢任何帮助,即使是一般格式,也非常感谢任何 java 提示。谢谢
调用前添加这两行finish();
Intent returnIntent = new Intent();
setResult(Activity.RESULT_OK, returnIntent);
finish();
Intent i= new Intent();
i.putExtra("whatever",yourResult);
setResult(Activity.RESULT_OK, i);
finish();
试试这个,
首先使用
使Person class可序列化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) {
}
}
}