Activity A 點擊 TextView 跳轉到 Activity B,B 獲取字符串後返回 A,A 更新 TextView 顯示。
請求碼標識請求,**結果碼**標護處理結果,**Intent**攜帶返回數據。
public class ActivityA extends AppCompatActivity {
private static final int REQUEST_CODE_B = 1001;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
textView = findViewById(R.id.textView);
textView.setOnClickListener(v -> {
Intent intent = new Intent(this, ActivityB.class);
startActivityForResult(intent, REQUEST_CODE_B);
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_B && resultCode == RESULT_OK && data != null) {
String result = data.getStringExtra("result_key");
if (result != null) {
textView.setText(result); // 更新 UI
}
}
}
}
public class ActivityB extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
// 模擬獲取字符串(如從 EditText、網絡、掃碼等)
String resultString = "來自 B 的數據: " + System.currentTimeMillis();
// 封裝返回數據
Intent resultIntent = new Intent();
resultIntent.putExtra("result_key", resultString);
setResult(RESULT_OK, resultIntent);
finish(); // 關鍵:結束 B,觸發 A 的 onActivityResult
}
// 可選:返回鍵處理
@Override
public void onBackPressed() {
setResult(RESULT_CANCELED);
super.onBackPressed();
}
}
AndroidX Activity 1.2.0+ 推薦使用註冊回調方式,避免 requestCode 衝突,代碼更清晰:
// 定義啟動器(成員變量)
private final ActivityResultLauncher launcherB = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_OK && result.getData() != null) {
String str = result.getData().getStringExtra("result_key");
textView.setText(str);
}
}
);
// 點擊事件中啟動
textView.setOnClickListener(v -> {
launcherB.launch(new Intent(this, ActivityB.class));
});
finish() 前必須調用 setResult(),否則 A 收到 RESULT_CANCELED 且無數據。requestCode 需全局唯一(傳統寫法),建議定義常量管理。singleTask 等特殊模式,可能需配合 onNewIntent。