2차 활동에서 1차 활동으로 데이터를 전달하는 방법은? - Android
저는 활동 1과 활동 2의 두 가지 활동이 있습니다.
인Activity1
단추와 텍스트 보기가 있습니다.버튼을 클릭하면 Activity2가 시작됩니다.
인Activity2
텍스트 편집이 있습니다.
활동 2에서 뒤로를 누를 때 활동 1의 텍스트 보기에서 활동 2의 텍스트 편집에서 검색한 데이터를 표시합니다.
누가 이 일을 할 수 있는 코드를 도와줄 수 있습니까?
활동 2 시작 및 사용setResult
활동 2에서 활동 1로 데이터를 다시 보내는 방법.활동 1에서 우선 순위를 변경해야 합니다.onActivityResult
업데이트용TextView
와 함께EditText
활동 2의 데이터.
예:
활동 1에서 활동 2를 다음과 같이 시작합니다.
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);
활동 2에서 사용setResult
데이터를 다시 보내는 경우:
Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);
finish();
그리고 활동 1에서 데이터를 수신합니다.onActivityResult
:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String strEditText = data.getStringExtra("editTextValue");
}
}
}
가능한 경우, 활동 간 데이터 공유를 위해 공유 환경설정도 사용합니다.
활동 1은 다음과 같이 활동 2를 시작해야 합니다.startActivityForResult()
.
활동 2는 다음을 사용해야 합니다.setResult()
데이터를 활동 1로 다시 보냅니다.
활동 2에서,
@Override
public void onBackPressed() {
String data = mEditText.getText();
Intent intent = new Intent();
intent.putExtra("MyData", data);
setResult(resultcode, intent);
}
활동 1에서,
onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String myStr=data.getStringExtra("MyData");
mTextView.setText(myStr);
}
}
}
제가 입력했을 때 다른 답변이 작동하지 않았습니다.setResult
에onBackPressed
슈퍼에 대한 주석 달기 호출onBackPressed
부름finish
수동으로 문제를 해결합니다.
@Override
public void onBackPressed() {
//super.onBackPressed();
Intent i = new Intent();
i.putExtra(EXTRA_NON_DOWNLOADED_PAGES, notDownloaded);
setResult(RESULT_OK, i);
finish();
}
그리고 첫 번째 활동에서는:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == QUEUE_MSG) {
if (resultCode == RESULT_OK) {
Serializable tmp = data.getSerializableExtra(MainActivity.EXTRA_NON_DOWNLOADED_PAGES);
if (tmp != null)
serializable = tmp;
}
}
}
이 옵션을 사용하여 결과에 대한 활동을 시작합니다.그러나 이러한 경우 이 접근 방식은 성능 측면에서 비용이 많이 들 수 있지만 경우에 따라 사용해야 할 수도 있습니다.
활동 2에서,
@Override
public void onBackPressed() {
String data = mEditText.getText();
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
Editor editor = sp.edit();
editor.putString("email",data);
editor.commit();
}
활동 1에서,
@Override
public void onResume() {
SharedPreferences sp = getSharedPreferences("LoginInfos", 0);
String dataFromOtherAct= sp.getString("email", "no email");
}
이것이 당신의 첫 번째 활동 1입니다.
public class Activity1 extends Activity{
private int mRequestCode = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, Activity2.class);
startActivityForResult(intent, mRequestCode);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == mRequestCode && resultCode == RESULT_OK){
String editTextString = data.getStringExtra("editText");
}
}
}
여기서 startActivityForResult(mRequestCode, Activity2.class)를 사용하여 Activity2.class를 시작합니다.
이번이 두 번째 활동입니다. 이름은 활동 2입니다.
public class Activity2 extends Activity {
private EditText mEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//mEditText = (EditText)findViewById(R.id.edit_text);
Intent intent = new Intent();
intent.putExtra("editText", mEditText.getText().toString());
setResult(RESULT_OK, intent);
}
}
이제 두 번째 활동을 완료한 후 BackPress()에서 setResult() 메서드를 호출하거나, 활동 2가 파괴될 때 아무 버튼이나 클릭하면 활동 1의 콜백 메서드가 호출됩니다. 그러면 활동 결과()에서 의도된 데이터를 얻을 수 있습니다.
당신에게 도움이 되길 바랍니다...:)
2021 자바에서 새 업데이트 후:
기본 활동의 결과()에 대해 시작 활동 대신 활동 결과 실행기()를 사용합니다.
ActivityResultLauncher<Intent> activityResultLaunch = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == 123) {
Intent data = result.getData();
String myStr = data.getStringExtra("MyData");
if (!TextUtils.isEmpty(myStr )) {
myTextView.setText(myStr);
}
}
}
});
작성 시 내부():
myBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Second.class);
activityResultLaunch.launch(intent);
}
});
두 번째 활동 내부(작성 시 외부):
@Override
public void onBackPressed() {
String data = myEditText.getText().toString();
Intent intent = new Intent();
intent.putExtra("MyData", data);
setResult(123, intent);
finish();
}
그리고 저는 제가 만든 소프트 버튼과 모든 안드로이드 기기의 기본인 소프트 키에서 데이터 유형을 보내는 것을 하고 싶은 문제가 있습니다. 그래서 저는 이것을 먼저 만들었습니다.Intent
"A" 내 "A" 에서.Activity
:
Intent intent = new Intent();
intent.setClass(context, _AddNewEmployee.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivityForResult(intent, 6969);
setResult(60);
그리고 두 번째 활동에서 "B"에 필드를 선언했습니다.Activity
:
private static int resultCode = 40;
한 후 "이 "A" 활또동에 "A" 에▁then▁"code▁the▁after▁change▁i▁in▁the▁same▁success의aa▁i"▁whenever▁to▁i▁result▁the다니▁that"'말▁is▁of▁my것과합▁value일경서하동▁"한Activity
다음은 "60", "60", "60"입니다.
private void backToSearchActivityAndRequest() {
Intent data = new Intent();
data.putExtra("PhoneNumber", employeePhoneNumber);
setResult(resultCode, data);
finish();
}
@Override
public void onBackPressed() {
backToSearchActivityAndRequest();
}
하세요.Super
이 작업을 올바르게 수행하려면 onBackPressed Method(onBackPressed Method)에서 선택합니다.
그러면 제가 전화를 해야겠습니다.onActivityResult
"A" 동의방법도활:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 6969 && resultCode == 60) {
if (data != null) {
user_mobile = data.getStringExtra("PhoneNumber");
numberTextField.setText(user_mobile);
getEmployeeByNumber();
}
}
}
그게 다예요, 도움이 되길 바랍니다.#해피코딩;
TL;DR 사용
긴 답변:
Android 개발자 설명서를 읽는 것으로 시작해야 합니다.구체적으로 질문의 주제는 의 섹션에서 다룹니다.Activity
파일
예제 코드와 관련하여 Android SDK는 좋은 예를 제공합니다.또한 여기에 있는 다른 답변은 사용할 샘플 코드의 짧은 단편을 제공합니다.
그러나 대안을 찾고 있는 경우 이 SO 질문을 읽어 보십시오.다음은 사용 방법에 대한 좋은 토론입니다.startActivityForResults
활동 간에 데이터를 전달하기 위한 몇 가지 다른 접근 방식뿐만 아니라 단편도 포함합니다.
언급URL : https://stackoverflow.com/questions/14292398/how-to-pass-data-from-2nd-activity-to-1st-activity-when-pressed-back-android
'source' 카테고리의 다른 글
Express 미들웨어의 req.local 대 res.local 대 res.data 대 req.data 대 app.local (0) | 2023.08.30 |
---|---|
두 배열의 값이 동일한지 확인하는 방법 (0) | 2023.08.30 |
추가 방법 후 Jquery click 이벤트가 작동하지 않음 (0) | 2023.08.30 |
데이터 프레임 목록을 다중 시트 Excel 스프레드시트에 저장 (0) | 2023.08.30 |
jQuery ajax 성공 오류 (0) | 2023.08.30 |