Intentデータ転送

10458 ワード

(1)まずActivityの簡単なジャンプ:
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);    

        }    

    }