在項目的界面跳轉時需要用到數據回傳.
可以使用google給咱們提供原生API---startActivityForResult(Intent intent, int requestCode)
具體使用:
int mResultCode = RESULT_CANCELED;
Intent mResultData = null;
public final void setResult(int resultCode, Intent data) {
synchronized (this) {
mResultCode = resultCode;
mResultData = data;
}
}
/** @hide Task isn't finished when activity is finished */
public static final int DONT_FINISH_TASK_WITH_ACTIVITY = 0;
public void finish() {
finish(DONT_FINISH_TASK_WITH_ACTIVITY);
}
private void finish(int finishTask) {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (false) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (resultData != null) {
resultData.prepareToLeaveProcess(this);
}
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData, finishTask)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}
@return If the activity is finishing, returns true; else returns false.
public boolean isFinishing() {
return mFinished;
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {}
但是還有請求碼和結果碼:
public class Activity_A extends AppCompatActivity implements View.OnClickListener {
private Button buttonA;
private Button buttonB;
private TextView name;
private TextView age;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
//完成控件的初始化 和 設置控件的點擊事件
buttonA = (Button) findViewById(R.id.button_a);
buttonB = (Button) findViewById(R.id.button_b);
age = (TextView) findViewById(R.id.age);
name = (TextView) findViewById(R.id.name);
buttonA.setOnClickListener(this);
buttonB.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//ButtonA和ButtonB的請求碼,標明請求來源
int ButtonA = 1;
int ButtonB = 2;
switch (view.getId()) {
case R.id.button_a://設置姓名 //第一個方法
startActivityForResult(new Intent(Activity_A.this, Activity_B.class), ButtonA);
break;
case R.id.button_b://設置年齡 //第一個方法
startActivityForResult(new Intent(Activity_A.this, Activity_B.class), ButtonB);
break;
}
}
//第三個方法
@Override//參數一:請求碼,參數二:結果碼,參數三,回傳參數的intent;
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) { //根據請求碼來區別
case 1: //如果請求碼爲1,即標明請求動作爲設置姓名;
if (resultCode == 6){ //如果返回碼等於6,咱們在界面中指定好了保存姓名的返回碼;
String Name = data.getStringExtra("name");//獲取到返回的字符串
name.setText("姓名 :"+Name); //設置到控件上
Toast.makeText(this, "完成了姓名的參數回傳", Toast.LENGTH_SHORT).show();
}
break;
case 2: //如果請求碼爲2,即標明請求動作爲設置年齡;
if (resultCode == 8){ //如果返回碼等於8,咱們在界面中指定好了保存年齡的返回碼;
String Age = data.getStringExtra("age");//獲取到返回的字符串
age.setText("年齡 :"+Age); //設置到控件上
Toast.makeText(this, "完成了年齡的參數回傳", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
public class Activity_B extends AppCompatActivity {
private EditText age;
private EditText name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
age = (EditText) findViewById(R.id.age);
name = (EditText) findViewById(R.id.name);
Activity_B.this.findViewById(R.id.saveName).setOnClickListener(new View.OnClickListener() {//保存
@Override
public void onClick(View view) {
int resultName = 6; //姓名的返回碼
String Name = name.getText().toString().trim(); //獲取到輸入的姓名
Intent intentName = new Intent(); //創建意圖intentName
intentName.putExtra("name",Name); //保存參數Name
Activity_B.this.setResult(resultName,intentName); //寫好返回碼Name //第二個方法
Activity_B.this.finish();
}
});
Activity_B.this.findViewById(R.id.saveAge).setOnClickListener(new View.OnClickListener() {//保存年齡
@Override
public void onClick(View view) {
int resultAge = 8; //年齡的返回碼
String Age = age.getText().toString().trim(); //獲取到輸入的年齡
Intent intentAge = new Intent(); //創建意圖intentAge
intentAge.putExtra("age",Age); //保存參數Age
Activity_B.this.setResult(resultAge,intentAge); //寫好返回碼Age //第二個方法
Activity_B.this.finish();
}
});
}
}