web-dev-qa-db-ja.com

押し戻されたときに、2番目のアクティビティから1番目のアクティビティにデータを渡す方法-android

Activity1Activity2の2つのアクティビティがあります。

Activity1にはButtonTextViewがあります。ボタンをクリックすると、Activity2が開始されます。

Activity2にはEditTextがあります。

EditText in Activity2 in TextView in Activity1から取得したデータを表示したいActivity2

誰かがこの作業を行うためのコードを手伝ってくれますか?

158
kumareloaded

startActivityForResult でActivity2を開始し、setResultメソッドを使用してActivity2からActivity1にデータを送り返します。 Activity1では、onActivityResultをActivity2のTextViewデータで更新するためにEditTextをオーバーライドする必要があります。

例えば:

Activity1で、Activity2を次のように開始します:

Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);

Activity2で、setResultを使用してデータを送り返します。

Intent intent = new Intent();
intent.putExtra("editTextValue", "value_here")
setResult(RESULT_OK, intent);        
finish();

そしてActivity1で、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");
         }     
    }
} 

可能であれば、アクティビティ間でデータを共有するために SharedPreferences も使用します。

287

Activity1を開始する必要がありますActivity2 with startActivityForResult()

Activity2は、setResult()を使用してデータをActivity1に送り返す必要があります。

Activity2では、

@Override
public void onBackPressed() {
    String data = mEditText.getText();
    Intent intent = new Intent();
    intent.putExtra("MyData", data);
    setResult(resultcode, intent);
}

Activity1では、

onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == RESULT_OK) {
            String myStr=data.getStringExtra("MyData");
            mTextView.setText(myStr);
        }
    }
}
21
Swayam

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;
        }
    }
}
16
FindOut_Quran

StartActivityforResultの代替としてこれを使用します。ただし、このような場合、このアプローチはパフォーマンスの点ではコストがかかる可能性がありますが、場合によっては使用する必要があるかもしれないことに注意してください。

アクティビティ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");
} 
4
katmanco

FirstActivityから、startActivityForResult()メソッドを使用してSecondActivityを呼び出します。

例えば:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

SecondActivityで、FirstActivityに戻すデータを設定します。戻りたくない場合は、何も設定しないでください。

例:secondActivityでデータを送り返す場合:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

データを返さない場合:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

FirstActivityクラスで、onActivityResult()メソッドの次のコードを記述します。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}
2
Manoj Reddy

これが最初のActivity1です。

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番目のアクティビティで、名前はActivity2です

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

}

これで、2番目のアクティビティを完了したら、onBackPress()またはボタンクリックからsetResult()メソッドを呼び出し、Activity2が破棄され、Activity1のコールバックメソッドonActivityResult()がそこから呼び出します意図からデータを取得できます。

それがあなたに役立つことを願っています... :)

2
vishesh chandra

これらを読んでください:

  1. onActivityResult()に結果を返す
  2. 呼び出されたアクティビティから結果を取得する-Android初心者向けチュートリアル

これらの記事は、Androidの2つのアクティビティ間でデータを渡す方法を理解するのに役立ちます。

2
Dixit Patel

そして、私が作成したソフトボタンとすべてのAndroidデバイスのデフォルトであるsoftKeyでこの送信データタイプを実行したい問題があるので、最初にこれを実行しました'"A" IntentActivityを作成しました。

            Intent intent = new Intent();
            intent.setClass(context, _AddNewEmployee.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivityForResult(intent, 6969);
            setResult(60);

次に、2番目のアクティビティで、「B」Activityでフィールドを宣言しました。

private static int resultCode = 40;

その後、リクエストを正常に送信した後、またはこのジョブがここで正常に実行されたことを「A」アクティビティに伝えたい場合は、resultCodeの値を「A」で言ったものに変更しますActivityこれは私の場合は「60」ですその後:

private void backToSearchActivityAndRequest() {
    Intent data = new Intent();
    data.putExtra("PhoneNumber", employeePhoneNumber);
    setResult(resultCode, data);
    finish();
}

@Override
public void onBackPressed() {
    backToSearchActivityAndRequest();
}

PS:これを適切に機能させるには、onBackPressedメソッドからSuperを忘れずに削除してください。

次に、「A」アクティビティのonActivityResultメソッドも呼び出す必要があります。

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

それだけです、それがあなたを助けることを願っています。 #HappyCoding;

0

TL; DR使用 Activity.startActivityForResult

長答:

Android開発者向けドキュメントを読むことから始めてください。具体的には、質問のトピックはActivityドキュメントの Starting Activities and Getting Results セクションで説明されています。

サンプルコードについては、Android SDKが良い例を提供します。また、ここでの他の回答は、使用するサンプルコードの短い断片を示しています。

ただし、代替手段を探している場合は、 this SO question をお読みください。これは、フラグメントでstartActivityForResultsを使用する方法、およびアクティビティ間でデータを渡すためのいくつかのアプローチに関する良い議論です。

0
Franci Penov