Activity1とActivity2の 2 つのアクティビティがあります。
Activity1私はButtonとTextViewを持っています。ボタンをクリックすると、Activity2が開始されます。
Activity2私はEditTextを持っています。
Activity2から Backを押したときに、Activity1 の TextView にActivity2のEditTextから取得したデータを表示したいと考えています。
誰かがこれを機能させるためのコードを手伝ってくれますか?
Activity1とActivity2の 2 つのアクティビティがあります。
Activity1私はButtonとTextViewを持っています。ボタンをクリックすると、Activity2が開始されます。
Activity2私はEditTextを持っています。
Activity2から Backを押したときに、Activity1 の TextView にActivity2のEditTextから取得したデータを表示したいと考えています。
誰かがこれを機能させるためのコードを手伝ってくれますか?
でActivity2を開始し、Activity2からActivity1にデータを送り返すためのメソッドをstartActivityForResult使用します。Activity1では、Activity2のデータで更新するsetResultためにオーバーライドする必要があります。onActivityResultTextViewEditText
例えば:
Activity1で、Activity2を次のように開始します。
Intent i = new Intent(this, Activity2.class);
startActivityForResult(i, 1);
Activity2setResultで、データを送り返すために使用します。
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をで開始する必要がありstartActivityForResult()ます。
Activity2は、データをActivity1setResult()に送り返すために使用する必要があります。
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);
}
}
}
This を 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");
}
これが最初の 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() から、またはActivity2が破棄されるときに任意のボタンクリックから setResult() メソッドを呼び出し、Activity1のコールバックメソッドonActivityResult()がそこから呼び出され、インテントからデータを取得できます..
それがあなたに役立つことを願っています... :)
これらを読んでください:
これらの記事は、Android の 2 つのアクティビティ間でデータを渡す方法を理解するのに役立ちます。
TL;DR使用Activity.startActivityForResult
長い答え:
まず、Android開発者向けドキュメントを読む必要があります。具体的には、質問のトピックはドキュメントのStarting Activities and Getting Resultsセクションで説明されていActivityます。
サンプルコードとして、AndroidSDKは良い例を提供します。また、ここでの他の回答は、使用するサンプルコードの短いスニペットを提供します。
ただし、代替案を探している場合は、このSOの質問を読んでください。これは、startActivityForResultsフラグメントを使用する方法、およびアクティビティ間でデータを渡すためのいくつかのアプローチについての良い議論です。