Android中使用Intent实现数据传递

Bundle类与Intent配合使用,可以在不同的Activity之间传递数据。

Bundle类的常用方法如下:

putString(String key,String value);//把字符串用键-值形式存放在Bundle对象之中
remove(String key);//移除指定的Key的值
getString(String key);//获取指定的Key的字符。

下面演示一个显示调用+数据传输

//传出数据
    public void go(View view){
        EditText text1=findViewById(R.id.text1);
        EditText text2=findViewById(R.id.text2);
        Intent intent=new Intent();
        ComponentName comp=new ComponentName(this, SActivity.class);
        intent.setComponent(comp);
        Bundle bundle=new Bundle();
        bundle.putString("text1",text1.getText().toString());
        bundle.putString("text2",text2.getText().toString());
        intent.putExtras(bundle);
        startActivity(intent);

    }

取数据

        TextView text=findViewById(R.id.hello);
        Bundle receive=this.getIntent().getExtras();
        String txt1=receive.getString("text1");
        String txt2=receive.getString("text2");
        text.setText(txt1+","+txt2+"\n");

下面进行隐式调用+数据传输

步骤

1.设置manifest配置文件中接收intent 的消息过滤器

2.创建针对该过滤器的intent对象传递消息。

其实和显示调用的差别很小,修改部分如下

    public void go(View view){
        EditText text1=findViewById(R.id.text1);
        EditText text2=findViewById(R.id.text2);
        Intent intent=new Intent();
//        ComponentName comp=new ComponentName(this, SActivity.class);
 //       intent.setComponent(comp);
        intent.setAction("second");
        Bundle bundle=new Bundle();
        bundle.putString("text1",text1.getText().toString());
        bundle.putString("text2",text2.getText().toString());
        intent.putExtras(bundle);
        startActivity(intent);

    }

可是问题来了,如果我想把数据返回上一个活动呢?这个时候我们可以做什么呢?

但是,返回上一个活动并没有一个启动活动的Intent来传递数据,这时候我们就可以使用startActivityForresult()来开启一个活动,有两个参数,第一个参数是Intent,第二个是请求码,用于在回调之后判断数据来源。这个用的时候可以进行查阅。

父activity

    public void sendMessage(View view){
        //相应按钮的事件
        EditText msg=findViewById(R.id.message);
        String s=msg.getText().toString();
        Log.e("sendMessage",s);
        Intent intent =new Intent(this ,SecondActivity.class);
        this.startActivityForResult(intent,1);
    }
//在子activity被销毁之后回调
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch(requestCode){
            case 1:
            if(resultCode == RESULT_OK){
                String returnedData=data.getStringExtra("data_return");
                Log.e("FirstActivity",returnedData);
            }
            break;
            default:
        }
    }
}

   public void closeActivity(View view){
        Log.e("activityState","SecondActivity_finish");
        Intent intent=new Intent();
        intent.putExtra("data_return","hello_firstActivity");
        setResult(RESULT_OK,intent);//向上个活动返回数据,两个参数。一个向上层返回处理结果,一个第二个是把带数据的intent传回。
        this.finish();
    }

猜你喜欢

转载自blog.csdn.net/a15929748502/article/details/110930812
今日推荐