AndroidでのActivity間のデータ転送とIntent使用

10498 ワード

AndroidでのActivity間のデータ転送とIntent使用
まずActivity:ActivityはAndroidの4つのコンポーネントの1つであり、Activityが参加する仕事の多くは操作インタフェースと関係があることを紹介します.私の次の記事ではActivityライフサイクルについて重点的に紹介しますが、この記事はこの部分を置いておきます.
Activityの起動方法について:
  • 通常、1つのプログラムには複数のActivityが含まれますが、1つのActivityだけがプログラムのメインエントリとなり、最初に起動したActivityです.
  • 現在のActivityがプログラムが最初に起動したActivityでない場合、このActivityの起動方法は他のActivityによってしか起動できません.
  • startActivity(Intent intent):現在のActivityはこのメソッドを呼び出し、他のActivity
  • を直接起動します.
  • startActivity ForResult(Intent intent,int requestCode):リクエストコードで新しいActivityを起動し、元のActivityは新しいActivityでデータの戻りを取得します.


  • Androidのクローズ方法について:
  • finish():現在のActivity
  • を終了
  • finishActivity(int requestCode):startActivity ForResultメソッドで起動したActivity
  • を終了します.
    Bundleを使用してActivity間でデータを交換します.Activityを見る前のジャンプはパラメータintentまで役立ちます.これは実は信使で、Activity間のデータ交換の媒介で、主にintentにデータを入れます.
    Androidはintentに多くのputとgetメソッドを提供してデータのアクセスを行いますが、Bundleという非常に便利なものがあります.それはintentの中の簡単なパケットです.intentを直接使ってデータにアクセスすると混乱しますので、bundleにデータをパッケージしてもらいます.intentも主にbundleでデータを携帯します.注意:Bundleオブジェクトが作成されていない場合、Intentにデータを格納すると、Intentは独自にBundleオブジェクトを作成し、Bundleにデータを格納します.
    以前はプロジェクトをしていたときにログイン画面にBundleオブジェクトでログイン情報を格納し、ログイン完了後に現在のActivityを終了し、Intentで結果を新しいActivityに戻す
    まずxmlレイアウトファイルについて説明します.
    "1.0" encoding="utf-8"?>
    "http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        
    

    対応するMainActivityジャワファイル
    import android.content.Intent;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.content.Intent;
    import android.util.Log;
    import android.view.View;
    import android.app.Activity;
    import android.widget.Button;
    import android.widget.Toast;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class MainActivity extends AppCompatActivity {
        private Button bt1;
        private Button bt2;
        private String getresult;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.first);
            bt1 = (Button) findViewById(R.id.button_first1);
            bt2 = (Button) findViewById(R.id.button_first2);
            bt1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent(MainActivity.this,second.class);
                    startActivity(intent);
                }
            });
            bt2.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View view){
                    Intent intent= new Intent(MainActivity.this,second.class);
                    //    startActivityForResultl  ,1    
                    startActivityForResult(intent,1);
                }
            });
        }
        /*
              startActivityForResultl          Code 1      requestCode
            onActivityResult               resultCode     
                               
                     Intent    data
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data){
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 1 && resultCode == 2) {
                Log.d("TAG", "aaaaa");
                //      data key            
                Bundle data2 = getIntent().getExtras();
                getresult = data.getStringExtra("data");
            }
        }
    }
    

    MainActivityでは、2つのボタンが定義されています.1つは戻り値を持ち、もう1つは戻り値を持ちません.比較すると、2つのボタンは同じインタフェースの2番目のレイアウトにジャンプしていることがわかります.
    "1.0" encoding="utf-8"?>
    "http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        "match_parent"
            android:layout_height="wrap_content"
            android:text="     "
            android:id="@+id/button_second1"
            android:layout_gravity="center_horizontal" />
    
        

    2番目のインタフェースのコード:
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.View;
    import android.widget.Button;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    /**
     * Created by Administrator on 2016/7/31 0031.
     */
    public class second extends AppCompatActivity {
        private Button bt2;
        private String returndata = "       second";
        @Override
        public void onCreate (Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.second);
            bt2 = (Button) findViewById(R.id.button_second2);
            bt2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent data = getIntent();
                    data.putExtra("data", returndata);
                    //  setResult         2    ,data Intent         
                    setResult(2, data);
                    Log.d("TAG",  "        ");
                    //      
                    finish();
                }
            });