Activity传值的几种方式

***Activity的传值

*第一种:Intent传值

主xml文件中设置按钮,点击跳转:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btn_name"
    android:onClick="send"/> //设置点击跳转事件

主Java代码中传值:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //点击按钮传递数据到指定activity中
    public void send(View view){
        Intent intent = new Intent(MainActivity.this, OtherActivity.class);
        intent.putExtra("name", "张三");//putExtra(String key,value):key表示唯一标示当前值的键,value为要传的数据
        intent.putExtra("age", 20);
        intent.putExtra("sex", ‘男‘);
        intent.putExtra("bl", true);
        startActivity(intent);
    }
}

目标活动的xml布局中添加textview来显示获取的值,目标活动的java代码中获取值:

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_other);
    tv = (TextView) findViewById(R.id.tv);
    //1.获取激活组件的intent对象
    Intent intent = getIntent();
    //2.根据key获取传递的数据
    String name = intent.getStringExtra("name");
    int age = intent.getIntExtra("age", 0);//getIntExtra(表示获取数据的key,如果根据key没有获得数据时显示的默认值)
    char sex = intent.getCharExtra("sex", ‘ ‘);
    boolean bl = intent.getBooleanExtra("bl", false);
    //3.将数据显示到TextView中
    tv.setText("name:"+name+"age:"+age+"sex:"+sex+"bl:"+bl);
}

*第二种:Bundle传值

public void send(View view){
    //1.创建Intent意图对象
    Intent intent = new Intent(MainActivity.this, OtherActivity.class);
    //2.创建bundle对象,用来存储需要传递的数据
    Bundle bundle = new Bundle();
    //3.将需要传递的数据存储到bundle对象中
    bundle.putString("name", "凤姐");
    bundle.putChar("sex", ‘女‘);
    bundle.putInt("age", 20);
    //4.将bundle对象存储到intent对象中
    intent.putExtras(bundle);
    //5.启动activity
    startActivity(intent);
}

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_other);
    tv = (TextView) findViewById(R.id.tv);
    //1.获取激活组件的intent对象
    Intent intent = getIntent();
    //2.获取传递的bundle的对象
    Bundle bundle = intent.getExtras();
    //3.在bundle中根据key获取传递的数据
    String name = bundle.getString("name");
    int age = bundle.getInt("age");
    char sex = bundle.getChar("sex");
    //4.将数据显示到TextView中
    tv.setText("name:"+name+"age:"+age+"sex:"+sex);
}

*第三种:使用Application全局对象传值

    1.单独创建一个类继承Application,将需要存储的数据定义,并提供set及get方法
    2.在发送的activity中存储数据
    3.在接收的activity中获取数据
    4.在清单文件中进行注册
        <application
        android:name="自定义application的包名.类名">
        </application>

public class MyApplication extends Application {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

public class MainActivity extends Activity {
    private MyApplication application;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    //点击按钮传递数据到目标activity中
    public void send(View view){
        application = (MyApplication) getApplication();
        application.setName("小明");
        application.setAge(18);
        startActivity(new Intent(MainActivity.this, OtherActivity.class));
    }
}

public class OtherActivity extends Activity {
    private TextView tv;
    private MyApplication application;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        tv = (TextView) findViewById(R.id.tv);

        application  = (MyApplication) getApplication();
        String name = application.getName();
        int age = application.getAge();
        tv.setText("name=" +name +"age="+age);
    }
}

<application
    android:name="com.example.creatactivity.MyApplication">
</application>

*第四种:启动Activity回传数据

案例演示:

public class MainActivity extends Activity {
    private EditText et_num1,et_num2;
    private TextView tv_result;
    private static final int REQUEST_CODE=1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_num1 = (EditText) findViewById(R.id.editText1);
        et_num2 = (EditText) findViewById(R.id.editText2);
        tv_result = (TextView) findViewById(R.id.textView3);
    }
    //点击按钮传递数据到目标activity中
    public void onClick(View view){
        Intent intent = new Intent(MainActivity.this, OtherActivity.class);
        String num1 = et_num1.getText().toString();
        String num2 = et_num2.getText().toString();
        intent.putExtra("num1", num1);
        intent.putExtra("num2", num2);
        startActivityForResult(intent, REQUEST_CODE);//startActivityForResult(请求的intent对象,大于0的整数请求码)
    }
     /*
      * 该方法用来处理setResult()方法回传的数据
      * int requestCode,请求码
      * int resultCode,结果码
      * Intent data,回传的intent意图对象
      */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == REQUEST_CODE&&resultCode==Activity.RESULT_OK){
            String result = data.getStringExtra("info");
            tv_result.setText(result);
        }
    }
}

public class OtherActivity extends Activity {
    private TextView tv_num1,tv_num2;
    private EditText et_result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_other);
        tv_num1 = (TextView) findViewById(R.id.tv1);
        tv_num2 = (TextView) findViewById(R.id.tv3);
        et_result = (EditText) findViewById(R.id.et1);
        Intent intent = getIntent();
        tv_num1.setText(intent.getStringExtra("num1"));
        tv_num2.setText(intent.getStringExtra("num2"));
    }
    //点击按钮将数据回传到主activity
    public void send(View view){
        String result = et_result.getText().toString();//获取结果数据

        Intent intent = new Intent();
        intent.putExtra("info", result);

        setResult(Activity.RESULT_OK, intent);//setResult(表示请求的结果码,表示回传的数据的intent对象)
        OtherActivity.this.finish();//关闭当前的activity
    }
}

原文地址:https://www.cnblogs.com/SanguineBoy/p/9782810.html

时间: 2024-10-14 02:50:46

Activity传值的几种方式的相关文章

Android中activity传值的两种方式

第一种:第一个Activity  /**      * 通过这个方法跳转到activity2界面*/     public void gotoActivity2(View v){      //创建一个意图      Intent intent=new Intent(this,MainActivity2.class);                //第一种传值方式      Bundle bundle=new Bundle();      bundle.putString("name&quo

深入分析:Fragment与Activity交互的几种方式(一,使用Handler)

这里我不再详细介绍那写比较常规的方式,例如静态变量,静态方法,持久化,application全局变量,收发广播等等. 首先我们来介绍使用Handler来实现Fragment与Activity 的交互. 第一步,我们需要在Activity中定义一个方法用来设置Handler对象. public void setHandler(Handler handler) { mHandler = handler; } 第二步,在Fragment中的回调函数onAttach()中得到Fragment所在Acti

深入分析:Fragment与Activity交互的几种方式(三,使用接口)

第一步:我们需要在Fragment中定一个接口,并确保我们的容器Activity实现了此接口: public interface onTestListener { public void onTest(String str); } @Override public void onAttach(Activity activity) { super.onAttach(activity); // 这个方法是用来确认当前的Activity容器是否已经继承了该接口,如果没有将抛出异常 try { mCal

页面传值的几种方式

1.使用QueryString 使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案.使用这种方法的步骤如下: 1,使用控件创建web表单(form) 2,创建可以返回表单的按钮和链接按钮 3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量 4,在保存的URL里添加QueryString参数

EF5(7) 后台使用SelectListItem传值给前台显示Select下拉框;mvc后台Action接收浏览器传值的4种方式; 后台Action向前台View视图传递数据的四种方式

一:后台使用SelectListItem 传值给前台显示Select下拉框 我们先来看数据库的订单表,里面有3条订单,他们的用户id对应了 UserInfo用户表的数据,现在我们要做的是添加一个Order控制器,显示订单列表,并且在修改订单的时候,把用户的id 用 select 下拉框显示出来,并且可以提交修改数据   1.1 我们通过比较原始的方法,来把数据 传递到前台后,前台使用  循环来显示 select 并且显示是哪个元素被选中 我们在前台的cshtml中,使用 @model 命令 指定

【转】【ASP.NET MVC系列】浅谈ASP.NET 页面之间传值的几种方式

ASP.NET MVC系列文章 原文地址:https://www.cnblogs.com/wangjiming/p/6275854.html [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作篇)(下) [04]浅谈ASP.NET框架 [05]浅谈ASP.NET MVC运行过程 [06]浅谈ASP.NET MVC 控制器 [07]浅谈ASP.NET MVC 路由 [08]浅谈AS

ASP.NET页面之间传值的几种方式

1.  QueryString 当页面上的form以get方式向页面发送请求数据时,web server将请求数据放入一名为QEURY_STRING的环境变量中,QeueryString方法从这个变量中取出相应的值. 先建立两个WebForm,分别为WebForm1和WebForm2,WebForm1添加两个文本框用于输入客户端的输入,一个按钮用于导航到要传值的页面WebForm2,在目的页添加一个文本框用于显示传递过来的值. WebForm1按钮单击代码: string url = "WebF

android activity启动的4种方式记录及打开其他应用的activity的坑

Android启动的四种方式分别为standard,singleTop,singleTask,singleInstence. standard是最常见的activity启动方式,也是默认的启动的方式.当启动一个activity的时候他将进入返回栈的栈顶.系统不会管栈内是否有相同的activity,方式像后入先出. singleTop方式是在活动启动的时候,系统先判定栈顶是否有相同的活动,如果没有则新建活动,否则将不新建活动.而是直接使用他. singleTask方式在活动启动的时候,系统先判定栈

ASP.NET 页面之间传值的几种方式

原文:http://www.cnblogs.com/wangjiming/archive/2017/01/18/6275854.html#!comments 详解每种方法 一.Request.QueryString 核心代码: protected void getQueryString_Click(object sender, EventArgs e) { string QueStr = Request.QueryString["name"]; Response.Write(QueSt