Android学习(使用Intent传递数据)

我们已经知道了Intent可以显式或者隐式地启动activity,其实Intent的用法还有很多,比如启动服务,发送广播消息等。下面我们来介绍一下如何使用Intent传递数据。

  • Intent的语法Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(uriString))
  • 第一个参数是intent要执行的动作,第二个参数是要传递的数据,这个数据可以是一个整数或者字符,也可以是一个地址、类等等。
    在这里插入图片描述我们结合这个demo来介绍一下Intent传递数据的方式。

首先是将第一页的名字传到第二页,我们使用了intent.putExtra这个方法。下面是点击事件的代码。

listView.setOnItemClickListener( new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String name = list.get( position );
        Intent intent = new Intent( test_main.this,test_add.class );//第二个参数是要传递给的类的名字
        intent.putExtra( "name",name );
        intent.addFlags( position );	//添加一个当前listview位置的标记
        startActivityForResult( intent,1 );  //先不看
    }
} );

我们点外卖时,外卖不会直接飞过来,而是由外卖小哥送过来,小哥先将外卖装到车子上,然后送到我们的家中。Intent的作用和外卖小哥类似,暂时存放数据,然后将数据发到应该发往的地方。

现在我们成功的将name的值放到了Intent中,接下来就是接受数据,然后返回一个值告诉第一个页面是否删除。这是第二个页面的关键代码。

TextView textView = findViewById( R.id.textview );
final Intent intent = getIntent();
final String name = intent.getStringExtra( "name" );//将Intent的数据保存到一个变量中
final int position = intent.getFlags();  //获取位置标记
textView.setText( name );

Button confirm = findViewById( R.id.confirm );
confirm.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        intent.addFlags( position );//设置返回位置标记
        setResult( RESULT_OK,intent );返回intent
        finish();
    }
} );

这里需要注意,返回时一定要调用setResult()方法,第一个是结果码,第二个是返回值。结果码RESULT_OK代表正常返回数据。但是我们只是在第二个页面返回还不行,还需要在第一个页面接收。

@Override
protected void onActivityResult(int requestCode, int resultCode,Intent data) {
    switch (requestCode){
        case 1:
            if(resultCode == RESULT_OK){
                int positionFlag =  data.getFlags();
                list.remove( positionFlag ); //删除listview中的值
                adapter.notifyDataSetChanged();//更新listview列表
            }
            break;
        default:
    }
}

我们又再第一个页面重写了onActivityResult方法。这里的case:1,1代表request code,是第一段代码先不看位置的第二个参数。这样我们就掌握了简单的Intent传递数据的方法。

结语

  • 其实Intent传递信息更多是用于广播消息(Brodercast),结合Intent过滤器,可以给其他的应用程序传递消息。有兴趣的同学可以继续学习。

猜你喜欢

转载自blog.csdn.net/qq_42893430/article/details/89977547