首页 > 代码库 > intent传递数据的二种方式startActivityForResult为什么不行?
intent传递数据的二种方式startActivityForResult为什么不行?
============问题描述============
package com.example.intentsenddatademo;
import java.util.List;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onStart() {
super.onStart();
// displaySera();
// displayPace();
}
public void sendSera(View v) {
Intent intent = new Intent(MainActivity.this, TestActivity.class);
startActivityForResult(intent, 1);
// startActivity(intent);
}
public void sendPace(View v) {
Intent intent = new Intent(MainActivity.this, TestActivity.class);
startActivityForResult(intent, 2);
// startActivity(intent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
// TODO Auto-generated method stub
switch (resultCode) {
case 100:
displaySera();
break;
case 200:
displayPace();
break;
default:
break;
}
}
private void displayPace() {
List<PersonPacerable> personPareList = getIntent()
.getParcelableArrayListExtra("pace");
if(personPareList==null){
Toast.makeText(MainActivity.this, "pace传递数据为null", Toast.LENGTH_LONG)
.show();
return;
}
if (personPareList.size() > 0) {
Toast.makeText(MainActivity.this, "pace传递数据成功", Toast.LENGTH_LONG)
.show();
outputList2(personPareList);
} else {
Toast.makeText(MainActivity.this, "pace传递数失败", Toast.LENGTH_LONG)
.show();
}
}
private void displaySera() {
List<PersonSeraliable> personSeraliablesList = (List<PersonSeraliable>) getIntent()
.getSerializableExtra("sera");
if(personSeraliablesList==null){
Toast.makeText(MainActivity.this, "sera传递数据为null", Toast.LENGTH_LONG)
.show();
return;
}
if (personSeraliablesList.size() > 0) {
Toast.makeText(MainActivity.this, "sera传递数据成功", Toast.LENGTH_LONG)
.show();
outputList1(personSeraliablesList);
} else {
Toast.makeText(MainActivity.this, "sera传递数失败", Toast.LENGTH_LONG)
.show();
}
}
private void outputList2(List<PersonPacerable> list) {
// TODO Auto-generated method stub
for (PersonPacerable p : list) {
System.out.println("name:"+p.getName() + ":" + "age:" + p.getAge() + "\t");
}
}
private void outputList1(List<PersonSeraliable> list) {
// TODO Auto-generated method stub
for (PersonSeraliable p : list) {
System.out.println("name:"+p.getName() + ":" + "age:" + p.getAge() + "\t");
}
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}
}
package com.example.intentsenddatademo;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
public class TestActivity extends Activity {
List<PersonSeraliable> personSeraliableList=new ArrayList<PersonSeraliable>();
List<PersonPacerable> personPacerableList=new ArrayList<PersonPacerable>();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
init();
}
private void init() {
// TODO Auto-generated method stub
for (int i = 0; i < 10; i++) {
String name="张三"+i;
int age=i;
PersonPacerable personPacerable=new PersonPacerable(name, age);
PersonSeraliable personSeraliable=new PersonSeraliable(name,age);
personPacerableList.add(personPacerable);
personSeraliableList.add(personSeraliable);
}
}
public void back(View v){
// back
Intent intent=new Intent(TestActivity.this,MainActivity.class);
intent.putExtra("sera", (Serializable)personSeraliableList);
setResult(100, intent);
// startActivity(intent);
finish();
}
public void back2(View v){
// back
Intent intent=new Intent(TestActivity.this,MainActivity.class);
intent.putParcelableArrayListExtra("pace", (ArrayList<PersonPacerable>)personPacerableList);
setResult(200, intent);
// startActivity(intent);
finish();
}
}
我使用红色部分的时候,传递数据是正常的,但是用startActivityForResult时传递的数据过去就变为null了。求解!!
============解决方案1============
http://m.baidu.com/from=2001a/bd_page_type=1/ssid=0/uid=0/pu=usm%400%2Csz%401320_1003%2Cta%40iphone_2_4.2_1_9.9/baiduid=4952E1C3E2DBC65C1114B11F7A408478/w=0_10_setresult/t=iphone/l=3/tc?ref=www_iphone&lid=6190608747684477040&order=1&vit=osres&tj=www_normal_1_0_10&m=8&srd=1&cltj=cloud_title&dict=20&sec=41404&di=5b2ccac0a87fbc0b&bdenc=1&nsrc=http://www.mamicode.com/IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_ytK1DK6mlrte4viZQRAXjb-RXWXHkfwwyPQps-DcyzyKTEz7qR2rKtnxmdN78vwdcbshgCAKxYZhg2iOgSAUDYpzK
应该能解决你的问题
============解决方案2============
setResult(200, intent);是个什么方法
intent传递数据的二种方式startActivityForResult为什么不行?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。