Activity1とActivity2の2つのアクティビティがあります。
Activity1
にはButtonとTextViewがあります。ボタンをクリックすると、Activity2が開始されます。
Activity2
にはEditTextがあります。
EditText in Activity2 in TextView in Activity1から取得したデータを表示したいActivity2。
誰かがこの作業を行うためのコードを手伝ってくれますか?
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 も使用します。
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);
}
}
}
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;
}
}
}
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");
}
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
}
}
}
これが最初の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()がそこから呼び出します意図からデータを取得できます。
それがあなたに役立つことを願っています... :)
これらを読んでください:
これらの記事は、Androidの2つのアクティビティ間でデータを渡す方法を理解するのに役立ちます。
そして、私が作成したソフトボタンとすべてのAndroidデバイスのデフォルトであるsoftKeyでこの送信データタイプを実行したい問題があるので、最初にこれを実行しました'"A" Intent
でActivity
を作成しました。
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;
TL; DR使用 Activity.startActivityForResult
長答:
Android開発者向けドキュメントを読むことから始めてください。具体的には、質問のトピックはActivity
ドキュメントの Starting Activities and Getting Results
セクションで説明されています。
サンプルコードについては、Android SDKが良い例を提供します。また、ここでの他の回答は、使用するサンプルコードの短い断片を示しています。
ただし、代替手段を探している場合は、 this SO question をお読みください。これは、フラグメントでstartActivityForResults
を使用する方法、およびアクティビティ間でデータを渡すためのいくつかのアプローチに関する良い議論です。