activity传值1
Activity 之间传值的几种方式
一、通过startActivity来进行Activity的传值
- 通过setClass方法来指定我们要跳转的Activity
-
Intent intent=new Intent(this,SecondActivity.class);
-
intent.putExtra(key,value);
-
startActivity(intent);
-
//或者
-
Intent intent=new Intent();
-
intent.setClass(MainActivity.this,SecondActivity.class);
-
intent.putExtra(key,value);
-
startActivity(intent);
- 通过setAction方法来我们要完成的一个action操作
-
Intent intent = new Intent();
-
intent.setAction("com.example.android_intent.second");
-
intent.putExtra(key,value);
-
startActivity(intent);
通过这种方式可以来指定我们的Intent对象要完成某个操作,这个操作可以是启动一个Activity,我们可以在AndroidManifest.xml中在 <Activity> 元素下指定一个 <intent-filter> 对象,然后其子元素声明一个 <action> 元素,这样我们可以将这个action动作绑定到了这个Activity上,即Android操作系统会去找与intent对象中指定的action名字的 <intent-filter>对象,然后执行相应的动作,例如:
-
<activity
-
android:name="com.example.activitytest.SecondActivity"
-
android:label="SecondActivity">
-
<intent-filter>
-
<action android:name="com.example.android_intent.second"/>
-
<category android:name="android.intent.category.DEFAULT"/>
-
</intent-filter>
-
</activity>
我们来看看如何在Activity对象中进行值的传递,也是通过 Intent 对象的各种putExtra方法来进行传递:
MainActivity:
-
Intent intent=new Intent(this,SecondActivity.class);
-
intent.putExtra("nv_name","小龙女");
-
Bundle bundle=new Bundle();
-
bundle.putString("nan_name","杨过");
-
intent.putExtra("bundle",bundle);
-
startActivity(intent);
-
Intent intent = getIntent();
-
textView1.setText(intent.getStringExtra("nv_name"));
-
Bundle bundleExtra = intent.getBundleExtra("bundle");
-
textView2.setText(bundleExtra.getString("nan_name"));
二、通过startActivityForResult方法来得到Activity的回传值
在一些情况下,我们通过 A activity跳转到 B activity上,这时希望 A activtiy能从 B activity上得到一些返回值,这个时候我们就不能使用startActivity方法了,而是使用 startActivityForResult方法来完成我们的操作。这样的场景在实际开发中还是很常见的,比如说A activity中做了一个查询的功能,查询向后台请求数据假设需要传入一个时间字段,不传的话默认是当前时间,B activity中可以设置时间,那我们就可以在根据B activity 传回来的时间,在A activity 中就会有不同的查询结果。
下面我们来模拟完成下提的需求:
MainActivity:
-
package com.example.activitytest;
-
-
import android.content.Intent;
-
import android.support.v7.app.AppCompatActivity;
-
import android.os.Bundle;
-
import android.view.View;
-
import android.widget.Button;
-
import android.widget.TextView;
-
-
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
-
private Button button;
-
private TextView textView;
-
private int REQUEST_GET_TIME=0;
-
-
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_main);
-
button= (Button) findViewById(R.id.btn_click);
-
textView= (TextView) findViewById(R.id.tv_time);
-
button.setOnClickListener(this);
-
-
}
-
-
-
public void onClick(View view) {
-
// Intent intent=new Intent();
-
// intent.setClass(MainActivity.this,SecondActivity.class);
-
// startActivity(intent);
-
Intent intent=new Intent(this,SecondActivity.class);
-
//第一个参数是Intent对象,第二个requestCode指定我们的一个启动标志值,因为我们可能有多个按钮,如果都是跳转到同一个Activity对象上,
-
//我们需要对其进行标志,才知道是哪个Activity对象跳转过来的。
-
startActivityForResult(intent,REQUEST_GET_TIME);
-
}
-
-
/**
-
* 所有的Activity对象的返回值都是由这个方法来接收
-
* requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.
-
* @param requestCode 表示的是启动一个Activity时传过去的requestCode值
-
* @param resultCode 表示的是启动后的Activity回传值时的resultCode值
-
* @param data 表示的是启动后的Activity回传过来的Intent对象
-
*/
-
-
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-
super.onActivityResult(requestCode, resultCode, data);
-
if(requestCode==REQUEST_GET_TIME&&resultCode==RESULT_OK){
-
textView.setText(data.getStringExtra("cur_time"));
-
}
-
}
-
}
-
package com.example.activitytest;
-
-
import android.content.Intent;
-
import android.support.v7.app.AppCompatActivity;
-
import android.os.Bundle;
-
import android.widget.TextView;
-
-
import java.text.SimpleDateFormat;
-
import java.util.Date;
-
-
public class SecondActivity extends AppCompatActivity {
-
private TextView textView;
-
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.activity_second);
-
textView= (TextView) findViewById(R.id.tv_cur_time);
-
String curTime=getCurTime();
-
textView.setText(curTime);
-
Intent intent=new Intent();
-
intent.putExtra("cur_time",curTime);
-
setResult(RESULT_OK,intent);
-
this.finish();
-
}
-
-
private String getCurTime() {
-
long currentTimeMillis = System.currentTimeMillis();
-
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
-
return simpleDateFormat.format(new Date(currentTimeMillis));
-
}
-
}下面是效果图:


浙公网安备 33010602011771号