zoukankan      html  css  js  c++  java
  • Activity之间传递参数(二)

    ------siwuxie095

       

       

    传递数据包

       

    1、传递数据包要用到Bundle,MainActivity.java中:

    package com.siwuxie095.sendargs;

       

    import android.content.Intent;

    import android.support.v7.app.AppCompatActivity;

    import android.os.Bundle;

    import android.view.View;

       

    public class MainActivity extends AppCompatActivity {

       

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

       

    findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

    //创建一个new Intent()实例,传入ContextClass类型的参数

    //对应MainActivity.this 被启动的Activity的类定义 TheAty.class

    Intent i = new Intent(MainActivity.this,TheAty.class);

       

    // //通过Intent对象,调用putExtra()方法,传参

    // //这里传入StringString类型的参数,实际上就是键值对

    // i.putExtra("data","你好 我是传递的参数");

     

       

    //传递数据包要用到Bundle,通过Bundle存入多种类型数据,传给第二个Activity

    Bundle b=new Bundle();

    //b.putBundle(); Bundle也可以嵌入Bundle

    b.putString("name","Jack");

    b.putInt("age",22);

    //putExtras() 传入Bundle

    i.putExtras(b);

       

    //传入i

    startActivity(i);

    }

    });

    }

    }

       

       

    2、在另一个Activity 即 TheAty.java 中,接收Bundle和设置默认参数

    (默认参数也可以被传入的参数覆盖):

    package com.siwuxie095.sendargs;

       

    import android.content.Intent;

    import android.support.v7.app.AppCompatActivity;

    import android.os.Bundle;

    import android.widget.TextView;

       

    public class TheAty extends AppCompatActivity {

       

       

    private TextView tv;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_the_aty);

       

    //TheAty是通过MainActivity中的Intent启动,直接通过getIntent()方法

    //获取与这个Activity相关的Intent

    Intent i=getIntent();

    //在第二个Activity TheAty 获取Bundle

    Bundle data=i.getExtras();

       

    //要访问TextView,先在上面声明

    //findViewById()的返回值在编译时只能查看到类型是View,而事实上是TextView类型

    //需要强制类型转换

    tv= (TextView) findViewById(R.id.tv);

       

    // //调用setText()方法设置字符串,这里字符串通过Intent获取

    // tv.setText(i.getStringExtra("data"));

       

    //用到了String.format()

    // 假如有一个不存在的数据 namex

    // 那么getString()有一个重载函数 可以设置默认值

    tv.setText(String.format("name = %s, age = %d, namex = %s",data.getString("name"),data.getInt("age"),data.getString("namex","Mary")));

    }

    }

       

       

    3、运行一览:

       

       

       

    4、除了通过直接 putExtras(),传入Bundle外,还可以通过putExtra()传:

    package com.siwuxie095.sendargs;

       

    import android.content.Intent;

    import android.support.v7.app.AppCompatActivity;

    import android.os.Bundle;

    import android.view.View;

       

    public class MainActivity extends AppCompatActivity {

       

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

       

    findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

    //创建一个new Intent()实例,传入ContextClass类型的参数

    //对应MainActivity.this 被启动的Activity的类定义 TheAty.class

    Intent i = new Intent(MainActivity.this,TheAty.class);

       

    // //通过Intent对象,调用putExtra()方法,传参

    // //这里传入StringString类型的参数,实际上就是键值对

    // i.putExtra("data","你好 我是传递的参数");

       

    //传递数据包要用到Bundle,通过Bundle存入多种类型数据,传给第二个Activity

    Bundle b=new Bundle();

    //b.putBundle(); Bundle也可以嵌入Bundle

    b.putString("name","Jack");

    b.putInt("age",22);

    //putExtras() 传入Bundle

    // i.putExtras(b);

    //除了通过putExtras()传,还能用下面的putExra()

    i.putExtra("data",b);

       

    //传入i

    startActivity(i);

    }

    });

    }

    }

       

       

    5、获取Bundle时也有所不同:

    package com.siwuxie095.sendargs;

       

    import android.content.Intent;

    import android.support.v7.app.AppCompatActivity;

    import android.os.Bundle;

    import android.widget.TextView;

       

    public class TheAty extends AppCompatActivity {

       

       

    private TextView tv;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_the_aty);

       

    //TheAty是通过MainActivity中的Intent启动,直接通过getIntent()方法

    //获取与这个Activity相关的Intent

    Intent i=getIntent();

    //在第二个Activity TheAty 获取Bundle

    // Bundle data=i.getExtras();

    Bundle data=i.getBundleExtra("data");

       

    //要访问TextView,先在上面声明

    //findViewById()的返回值在编译时只能查看到类型是View,而事实上是TextView类型

    //需要强制类型转换

    tv= (TextView) findViewById(R.id.tv);

       

    // //调用setText()方法设置字符串,这里字符串通过Intent获取

    // tv.setText(i.getStringExtra("data"));

       

    //用到了String.format()

    // 假如有一个不存在的数据 namex

    // 那么getString()有一个重载函数 可以设置默认值

    tv.setText(String.format("name = %s, age = %d, namex = %s",data.getString("name"),data.getInt("age"),data.getString("namex","Mary")));

    }

    }

       

       

       

       

    【made by siwuxie095】

  • 相关阅读:
    Fiddler使用教程(收藏)
    js类的几种写法
    对js中prototype的理解
    【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)--转
    js加载顺序
    html加载js那些事
    HTTP状态码详解
    JS编码解码
    css绝对定位、相对定位和文档流的那些事
    jQuery事件绑定方法bind、 live、delegate和on的区别
  • 原文地址:https://www.cnblogs.com/siwuxie095/p/6241927.html
Copyright © 2011-2022 走看看