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         
    }
}

猜你喜欢

转载自www.cnblogs.com/SanguineBoy/p/9782810.html
今日推荐