source

2차 활동에서 1차 활동으로 데이터를 전달하는 방법은? - Android

lovecheck 2023. 8. 30. 21:47
반응형

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);
        }
    }
}

제가 입력했을 때 다른 답변이 작동하지 않았습니다.setResultonBackPressed슈퍼에 대한 주석 달기 호출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

반응형