美文网首页
第一章(Activity之间传递数据)

第一章(Activity之间传递数据)

作者: Yolyn | 来源:发表于2018-05-16 19:05 被阅读19次

    向下一个活动传递数据

    1. 在MainActivity中:
        public void button1(View view){
            Intent intent=new Intent(this,SecondActivity.class);
            intent.putExtra("extra_data","Hello SecondActivity");
            startActivity(intent);
        }
    
    • putExtra(String name,String value)中前一个参数表示The name of the extra data, with package prefix,第二个参数表示The String data value.
    1. 在SecondActivity中
       protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.second_layout);
            Intent intent=getIntent();
            String data=intent.getStringExtra("extra_data");
            Log.d(TAG, "onCreate: "+data);
        }
    

    getIntent()官方解释是Return the intent that started this activity
    getStringExtra()中传入的参数是MainActivity中的putExtra(String name,String value)设置的name

    向上一个活动返回数据

    1. 在MainActivity中:
       public void button2(View view){
            Intent intent=new Intent(this,SecondActivity.class);
            startActivityForResult(intent,1);
        }
    

    public void startActivityForResult(android.content.Intent intent,int requestCode)
    第一个参数传入intent,第二个参数传入请求码

    1. 在SecondActivity的onCreate中:
     Button button=(Button)findViewById(R.id.button1);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent=new Intent();
                    intent.putExtra("data_return","Hello FirstActivity");
                    setResult(RESULT_OK,intent);
                    finish();
                }
            });
            
    

    也可以设置按返回键返回数据:

      @Override
        public void onBackPressed() {
            Intent intent=new Intent();
            intent.putExtra("data_return","Hello FirstActivity");
            setResult(RESULT_OK,intent);
            finish();
        }
    

    public final void setResult(int resultCode,android.content.Intent data)方法中resultCode返回码,第二个传入intent

    1. 在MainActivity中复写onActivityResult方法:
       @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            switch (requestCode){
                case 1:
                    if(resultCode==RESULT_OK){
                        String receiverdData=data.getStringExtra("data_return");
                        Toast.makeText(this,receiverdData,Toast.LENGTH_SHORT).show();
                    }
                    break;
                default:
                    Toast.makeText(this,"nothing",Toast.LENGTH_SHORT).show();
            }
        }
    

    总结:MainActivity中的startActivityForResult方法对应SecondActivity中的setResult方法。
    Intent还可以传递对象,要求是对应的类实现Serializable或Parcelable接口。例子在以后章节里面用到再详解。

    相关文章

      网友评论

          本文标题:第一章(Activity之间传递数据)

          本文链接:https://www.haomeiwen.com/subject/wyjmdftx.html