码迷,mamicode.com
首页 > 其他好文 > 详细

intent传递数据的二种方式startActivityForResult为什么不行?

时间:2014-10-08 17:59:45      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:android   style   http   color   io   os   使用   ar   java   


====================问题描述====================
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=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_ytK1DK6mlrte4viZQRAXjb-RXWXHkfwwyPQps-DcyzyKTEz7qR2rKtnxmdN78vwdcbshgCAKxYZhg2iOgSAUDYpzK
应该能解决你的问题
====================解决方案2====================
引用 4 楼 wqbs369 的回复:
Quote: 引用 1 楼 lionfresh 的回复:

你都没有传递数据,当然是null。请仔细看下startActivityForResult的用法。

intent.putParcelableArrayListExtra("pace", (ArrayList<PersonPacerable>)personPacerableList);这句不是传递了数据了吗〈〉?

setResult(200, intent);是个什么方法

intent传递数据的二种方式startActivityForResult为什么不行?

标签:android   style   http   color   io   os   使用   ar   java   

原文地址:http://www.cnblogs.com/yiguobei99/p/4011108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!