Intentデータ転送
10458 ワード
(1)まずActivityの簡単なジャンプ:
1)、Activityの切り替えは一般にIntentによって実現され、Intentは開始点(現在のActivity)と終了点(ターゲットActivity)を記述するActivityが別のActivityに到達するリード者である.簡単なIntentは以下のように実現されます:(個人が直接定義する方法を好む)
2)、通常、Activityの切り替えでは、前のActivity 1のデータを次のActivity 2に渡したいと考えています.このとき、Bundleを利用して実現することができます.Bundleは、私たちが伝えたいデータを格納するためのパケットに相当します.例えば、Intentはメールのようなもので、送信者アドレス(元のActivity)も受信者アドレス(ターゲットActivity)もありますが、Bundleは添付ファイルでも手紙の内容と見なすことができます.以下に、その簡単な実装を示します.
a、Activity 1送信:
b、Activity 2 Activity 1からのデータを受け取る:
3)、データの転送方法の問題が解決した場合、次の問題は、ターゲットActivityから返される処理結果をどのように受け入れるかである.ここでは、onRestartメソッド(onRestrartはActivityの再起動時に励起されるイベントを表す)で処理結果を受け取る方法と、Activity 2がActivity 1から送信されたデータ処理を受け入れる方法とが2つあります.もう1つの方法は、応答モード切替を採用することである.ここでは、主に2つ目の方法があります.応答モードの切り替えは通常の切り替えとは異なり,通常は行ったり来たりしているが,応答は行ったり来たりしている.コード実装も異なる:1、Activity 1からActivity 2:startActivity ForResult(intent,0);2、Activity 2からActivity 1:setResult(RESULT_OK,intent)に戻ります.3、返却結果を受け入れる:protected void onActivity Result().具体的なコードは以下の通りです.
a、Activity 1からActivity 2に切り替える:
b、Activity 2からActivity 1に戻る:
c、Activity 1 Activity 2の返却結果を受け入れる:
4、Activity 2からActivity 1に戻る(Activity 1がActivity 2に切り替わったときにfinishメソッドが呼び出された)と、Activity 1以前のデータがすべてなく、簡単に言えばデータが残されていないことがわかります.finishメソッドのため、onDestroy()がトリガーされ、Activity 1が破棄されます.次回Activity 1に来た時は、全く新しいActivity 1で、従来のデータはもちろんありませんでした.切替前の状態を保持するには、1、切替時にfinish()メソッドを呼び出さない2つの方法があります.2、SharedPreferencesを用いてデータを保存する.SharedPreferencesは軽量レベルのストレージクラスで、主にテキストボックス値、ボタンステータスなど、いくつかのフォームのステータスを保存するために使用されます.Sessionと似ています.一般的にonPause()メソッドでデータを保存し、onResume()でデータを抽出します.次のようになります.
a、データの保存
b、データの抽出
1)、Activityの切り替えは一般にIntentによって実現され、Intentは開始点(現在のActivity)と終了点(ターゲットActivity)を記述するActivityが別のActivityに到達するリード者である.簡単なIntentは以下のように実現されます:(個人が直接定義する方法を好む)
Intent intent = new Intent(); // Intent
intent.setClass(activity1.this, activity2.class); //
startActivity(intent); //
//
intent = (Intent) new Intent(activity1.this,activity2.class)
2)、通常、Activityの切り替えでは、前のActivity 1のデータを次のActivity 2に渡したいと考えています.このとき、Bundleを利用して実現することができます.Bundleは、私たちが伝えたいデータを格納するためのパケットに相当します.例えば、Intentはメールのようなもので、送信者アドレス(元のActivity)も受信者アドレス(ターゲットActivity)もありますが、Bundleは添付ファイルでも手紙の内容と見なすことができます.以下に、その簡単な実装を示します.
a、Activity 1送信:
Intent intent = new Intent();
intent.setClass(activity1.this, activity2.class); //
Bundle bundle = new Bundle(); // Bundle
bundle.putString("something", "Activity1 "); //
intent.putExtras(bundle); // Bundle Intent
startActivity(intent); //
b、Activity 2 Activity 1からのデータを受け取る:
Intent intent = this.getIntent(); // intent
Bundle bundle = intent.getExtras(); // intent bundle
string = bundle.getString("something"); // Bundle
3)、データの転送方法の問題が解決した場合、次の問題は、ターゲットActivityから返される処理結果をどのように受け入れるかである.ここでは、onRestartメソッド(onRestrartはActivityの再起動時に励起されるイベントを表す)で処理結果を受け取る方法と、Activity 2がActivity 1から送信されたデータ処理を受け入れる方法とが2つあります.もう1つの方法は、応答モード切替を採用することである.ここでは、主に2つ目の方法があります.応答モードの切り替えは通常の切り替えとは異なり,通常は行ったり来たりしているが,応答は行ったり来たりしている.コード実装も異なる:1、Activity 1からActivity 2:startActivity ForResult(intent,0);2、Activity 2からActivity 1:setResult(RESULT_OK,intent)に戻ります.3、返却結果を受け入れる:protected void onActivity Result().具体的なコードは以下の通りです.
a、Activity 1からActivity 2に切り替える:
Intent intent = new Intent();
intent = intent.setClass(ActivityIntent.this, AnotherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("string", et_string.getText().toString());
intent.putExtras(bundle);
startActivityForResult(intent,0); //
//ActivityIntent.this.finish(); // finish, onDestroy();
b、Activity 2からActivity 1に戻る:
Intent intent = new Intent();
intent = intent.setClass(AnotherActivity.this, ActivityIntent.class);
Bundle bundle = new Bundle();
bundle.putInt("result", "Activity2 ");
intent.putExtras(bundle);
AnotherActivity.this.setResult(RESULT_OK, intent); //RESULT_OK
AnotherActivity.this.finish(); // onDestroy();
c、Activity 1 Activity 2の返却結果を受け入れる:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch(resultCode) { // ,
case RESULT_OK:
Bundle bundle =data.getExtras(); // intent bundle
String result = bundle.getInt("result");
break;
default:
break;
}
}
4、Activity 2からActivity 1に戻る(Activity 1がActivity 2に切り替わったときにfinishメソッドが呼び出された)と、Activity 1以前のデータがすべてなく、簡単に言えばデータが残されていないことがわかります.finishメソッドのため、onDestroy()がトリガーされ、Activity 1が破棄されます.次回Activity 1に来た時は、全く新しいActivity 1で、従来のデータはもちろんありませんでした.切替前の状態を保持するには、1、切替時にfinish()メソッドを呼び出さない2つの方法があります.2、SharedPreferencesを用いてデータを保存する.SharedPreferencesは軽量レベルのストレージクラスで、主にテキストボックス値、ボタンステータスなど、いくつかのフォームのステータスを保存するために使用されます.Sessionと似ています.一般的にonPause()メソッドでデータを保存し、onResume()でデータを抽出します.次のようになります.
a、データの保存
// :onStart()->onResume()->onPause()
@Override
protected void onPause() {
super.onPause();
Log.e("Lifecycle_Activity1", "onPause()");
// Session
SharedPreferences.Editor saveData = getPreferences(0).edit();
saveData.putString("value", et_string.getText().toString());
saveData.commit();
}
b、データの抽出
// :onStart()->onResume()
@Override
protected void onResume() {
super.onResume();
Log.e("Lifecycle_Activity1", "onResume()");
//
SharedPreferences getData = getPreferences(0);
String value = getData.getString("value", null);
if(value != null) {
et_string.setText(value);
}
}