Activity跳转的数据交换问题

Activity跳转的数据交换问题—学习笔记

分类:Android

以解决这两个问题为例:

问题一:有两个Activity(A和B),从A跳转到B,同时B需要A中的数据:

效果图:

代码: MainActivity类:

package com.test.bundletest;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.RadioButton;{private EditText name_edt;private EditText age_edt;private RadioButton sex_rbtn;private Button submit;(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();submit.setOnClickListener(new OnClickListener() {(View v) {String name = name_edt.getText().toString();String age = age_edt.getText().toString();String sex = sex_rbtn.isChecked()?”男”:”女”;Student stu = new Student(name, age, sex);Intent intent = new Intent(MainActivity.this,SecondActicity.class);Bundle bundle = new Bundle();bundle.putSerializable(“student”, stu);intent.putExtras(bundle);//启动intent对应的ActivitystartActivity(intent);}});}() {name_edt = (EditText) findViewById(R.id.id_edt_name);age_edt = (EditText) findViewById(R.id.id_edt_age);sex_rbtn = (RadioButton) findViewById(R.id.id_sex_male);submit = (Button) findViewById(R.id.id_btn_submit);}}

SecondActivity类:

package com.test.bundletest;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.widget.TextView;{private TextView tv_name;private TextView tv_age;private TextView tv_sex;(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_second);initView();//获取启动该Result的IntentIntent intent = getIntent();//直接通过Intent取出他所携带的Bundle数据包中的数据Student student = (Student) intent.getSerializableExtra(“student”);tv_name.setText(student.getName());tv_age.setText(student.getAge());tv_sex.setText(student.getSex());}() {tv_name = (TextView) findViewById(R.id.id_name);tv_age = (TextView) findViewById(R.id.id_age);tv_sex = (TextView) findViewById(R.id.id_sex);}}

上边的实例中就是在MainActivity类中发送数据,然后发送到SecondActivity类,由SecondActivity处理接收到的数据并显示出来。

收获 当A携带数据发送给B的时候,然后由B接收处理数据时: 可以使用Intent中携带Bundle中的数据的方式来处理。

问题二:同样是A和B两个Activity,A跳转到B后,当B关闭时将B中的数据回传到A中:

效果图:

代码: MainActivity类:

package com.test.activitytest;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;{private Button btn_get;private TextView tv_city;(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_get = (Button) findViewById(R.id.id_btn_getCity);tv_city = (TextView) findViewById(R.id.id_tv_city);btn_get.setOnClickListener(new OnClickListener() {(View v) {Intent intent = new Intent(MainActivity.this,SecondActivity.class);// 启动指定Activity并等待返回的结果,其中0是请求码,用于标识该请求startActivityForResult(intent, 0);}});}(int requestCode, int resultCode, Intent intent) {// 当requestCode,resultCode同时为0时,也就是处理待定的结果if (requestCode == 0 && resultCode == 0) {// 取出Intent里的Extras数据Bundle bundle = intent.getExtras();//取出Bundle中的数据String result = bundle.getString(“city”);tv_city.setText(result);}}}

SecondActivity类:

package com.test.activitytest;import android.app.ExpandableListActivity;import android.content.Intent;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseExpandableListAdapter;import android.widget.ExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.ExpandableListView.OnChildClickListener;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;{//定义省份数组private String[] provinces = new String[]{“山东”,”湖南”,”广东”};private String[][] cities = new String[][] {{“东营”,”济南”,”青岛”},{“衡阳”,”长沙”,”岳阳”},{“广州”,”深圳”,”中山”}};(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ExpandableListAdapter adapter = new BaseExpandableListAdapter() {(int groupPosition, int childPosition) {return true;}() {return true;}View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {LinearLayout ll = new LinearLayout(SecondActivity.this);ll.setOrientation(0);ImageView logo = new ImageView(SecondActivity.this);ll.addView(logo);TextView textView = getTextView();textView.setText(getGroup(groupPosition).toString());ll.addView(textView);return ll;}(int groupPosition) {return groupPosition;}() {return provinces.length;}Object getGroup(int groupPosition) {return provinces[groupPosition];}(int groupPosition) {return cities[groupPosition].length;}View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {TextView textView = getTextView();textView.setText(getChild(groupPosition, childPosition).toString());return textView;}(int groupPosition, int childPosition) {return childPosition;}Object getChild(int groupPosition, int childPosition) {return cities[groupPosition][childPosition];}};//设置该窗口显示列表setListAdapter(adapter);getExpandableListView().setOnChildClickListener(new OnChildClickListener() {(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {//获取启动该Activity之前的Activity对应的IntentIntent intent = getIntent();intent.putExtra(“city”, cities[groupPosition][childPosition]);//设置该Activity的结果码,并设置结束之后退回的ActivitySecondActivity.this.setResult(0,intent);//结束该ActivitySecondActivity.this.finish();return false;}});}private TextView getTextView(){AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,64);TextView textView = new TextView(SecondActivity.this);textView.setLayoutParams(lp);textView.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);textView.setPadding(36, 0, 0, 0);textView.setTextSize(20);return textView;}}

上边的实例就是从第一个Activity跳转到第二个Activity,然后将第二个Activity中的数据回传给第一个Activity,并在第一个Activity中显示出回传过来的数据。

收获:

路灯和我之间,究竟谁是谁的过客,

Activity跳转的数据交换问题

相关文章:

你感兴趣的文章:

标签云: