Activity跳转的数据交换问题---Activity学习笔记(二)
以解決這兩個問題為例:
問題一:有兩個Activity(A和B),從A跳轉到B,同時B需要A中的數(shù)據(jù):
效果圖:
代碼:
MainActivity類:
SecondActivity類:
package com.test.bundletest;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView;public class SecondActicity extends Activity {private TextView tv_name;private TextView tv_age;private TextView tv_sex;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_second);initView();//獲取啟動該Result的IntentIntent intent = getIntent();//直接通過Intent取出他所攜帶的Bundle數(shù)據(jù)包中的數(shù)據(jù)Student student = (Student) intent.getSerializableExtra("student");tv_name.setText(student.getName());tv_age.setText(student.getAge());tv_sex.setText(student.getSex());}private void initView() {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類中發(fā)送數(shù)據(jù),然后發(fā)送到SecondActivity類,由SecondActivity處理接收到的數(shù)據(jù)并顯示出來。
收獲
當A攜帶數(shù)據(jù)發(fā)送給B的時候,然后由B接收處理數(shù)據(jù)時:
可以使用Intent中攜帶Bundle中的數(shù)據(jù)的方式來處理。
問題二:同樣是A和B兩個Activity,A跳轉到B后,當B關閉時將B中的數(shù)據(jù)回傳到A中:
效果圖:
代碼:
MainActivity類:
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;public class SecondActivity extends ExpandableListActivity {//定義省份數(shù)組private String[] provinces = new String[]{"山東","湖南","廣東" };private String[][] cities = new String[][] {{"東營","濟南","青島"},{"衡陽","長沙","岳陽"},{"廣州","深圳","中山"}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ExpandableListAdapter adapter = new BaseExpandableListAdapter() {@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return true;}@Overridepublic boolean hasStableIds() {return true;}@Override//該方法決定每個組選項的外觀public 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;}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic int getGroupCount() {return provinces.length;}@Override//獲取指定組位置處的組數(shù)據(jù)public Object getGroup(int groupPosition) {return provinces[groupPosition];}@Overridepublic int getChildrenCount(int groupPosition) {return cities[groupPosition].length;}@Override//該方法決定每個子選項的外觀public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {TextView textView = getTextView();textView.setText(getChild(groupPosition, childPosition).toString());return textView;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Override//獲取指定組位置,指定子列表項處的子列表項數(shù)據(jù)public Object getChild(int groupPosition, int childPosition) {return cities[groupPosition][childPosition];}};//設置該窗口顯示列表setListAdapter(adapter);getExpandableListView().setOnChildClickListener(new OnChildClickListener() {@Overridepublic boolean onChildClick(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中的數(shù)據(jù)回傳給第一個Activity,并在第一個Activity中顯示出回傳過來的數(shù)據(jù)。
收獲:
(1)有兩個Activity(A和B),當A啟用指定B,而且期望獲取指定的B返回的結果的時候,A可以使用startActivityForResult(Intent intent,int requestCode)方法來啟用指定的B。
(2)為了獲取B返回的結果,需要使用下面的方法:
1. A需要重寫onActivityResult(int requestCode,int resultCode,Intent intent),當B返回結果的時候,該方法就會被觸發(fā)。requestCode—請求代碼,resultCode—返回結果碼。
2. B需要調用setResult()方法設置處理結果。
(3)上邊設置requestCode和resultCode的原因:
一個Activity中可能包含多個按鈕,并調用多個startActivityForResult()方法來打開多個不同的Activity處理不同的業(yè)務,這些新的Activity關閉后,系統(tǒng)都將會回調前面的Activity的onActivityResult(int requestCode,int ResultCode,Intent intent)方法。
為了知道該方法是由哪個請求的結果觸發(fā)的,可利用requestCode請求碼,為了知道返回的數(shù)據(jù)來自于哪個新的Acitivity,可利用ResultCode結果碼。
總結
以上是生活随笔為你收集整理的Activity跳转的数据交换问题---Activity学习笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Activity和Service的生命周
- 下一篇: Activity的回调机制---Acti