Android学習ノート——Activity間でデータを渡す

5700 ワード

Activityでは、データを転送する必要がある場合が多く、2つのアクティビティ間でデータを転送するにはIntentを使用してデータを転送します.Intentはデータを運ぶことができ、intentには多くのputextraメソッドのリロードがあり、データを格納することができます.その後、起動されたアクティビティでgetIntent()メソッドを使用してActivityを起動するintentを取得し、このIntentでデータを取得することができます.
public class MainActivity extends AppCompatActivity {
        Button button;
        EditText editText;
        public static final String SEND_MESG = "MSG";
        public static final int RESPONSE_CODE = 1;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button = (Button) findViewById(R.id.btn_startactivity);
            editText = (EditText) findViewById(R.id.et_mssage);
            button.setOnClickListener(new View.OnClickListener() {// 
                @Override
                public void onClick(View view) 
                    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                    intent.putExtra(SEND_MESG, editText.getText().toString());// Inent Sting 
                    startActivityForResult(intent, RESPONSE_CODE);// startActivityForResult() , , 
                }
            });
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // , , , Intent
            if (requestCode == MainActivity. RESPONSE_CODE)
                switch (resultCode) {
                    case MainActivity.RESULT_OK: {
                        Toast.makeText(MainActivity.this, data.getStringExtra("data_return"), Toast.LENGTH_SHORT).show();
                    }
                }
        }

    }

2つ目のイベントを見てみましょう
public class SecondActivity extends AppCompatActivity {
        TextView textView;
        EditText editText;
        Button button;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_second);
            button = (Button) findViewById(R.id.btn_response);
            editText = (EditText) findViewById(R.id.et_return);
            textView = (TextView) findViewById(R.id.tv_show);
            Intent intent = getIntent();
            String s = intent.getStringExtra(MainActivity.SEND_MESG);
            textView.setText(s);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent();
                    intent.putExtra("data_return",editText.getText().toString());// , Intent EditText 
                    setResult(MainActivity.RESULT_OK,intent);
                    // setResult() 
                    finish();
                }
            });
        }
    }

RequestCodeの役割要求コードの値は、要求元を識別するために自分で設定されている.たとえば、1つのActivityには2つのボタンがあり、この2つのボタンをクリックすると同じActivityが開きます.そのボタンが新しいActivityを開いても、この新しいActivityがオフになると、前のActivityのonActivity Result(int requestCode,int resultCode,Intent data)メソッドが呼び出されます.onActivity Result()メソッドでは、新しいActivityがそのボタンで開かれていることを知っておく必要があり、対応する処理を行います.
ResutCodeの役割startActivity ForResult()メソッドで複数の異なるActivityを開くと、これらの新しいActivityが閉じると、前のActivityのonActivity Result(int requestCode,int resultCode,Intent data)メソッドが呼び出されます.返されたデータがどの新しいActivityから来たかを知るには、onActivity Result()メソッドで次のようにします(ResultActivityとNewActivityは開く新しいActivityです):
簡単に言えば、RequestCodeは新しいアクティビティがどのアクティビティが開いているかを判断するために使用され、ResultCodeは返されたデータがどの新しいアクティビティから来たかを判断するために使用されます.