700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android--Activity中使用Intent传值

Android--Activity中使用Intent传值

时间:2024-07-01 00:18:13

相关推荐

Android--Activity中使用Intent传值

Android--Activity中使用Intent传值

Intent,又称为意图,是一种运行时绑定机制,它能在程序运行的过程中链接两个不同的组件(Activity、Service、BroadcastReceiver)。通过Intent,程序可以向Android表达某种请求或意愿,Android会根据意愿的内容选择适当的组件来请求。

在这些组件之间的通讯中,主要是由Intent协助完成的。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

通过Intent请求Activity,必须在AndroidManifest.xml文件中对被请求的Activity新增标签配置,否则会导致错误。

Intent一般包含两个主要信息,action、data。

action:表示这个Intent此次操作的动作。

data:表示这次动作涉及的数据。

通过一个例子来展示Activity中使用Intent导向新Activity并传递数据。此程序仅在两个页面之间相互跳转,但是每次跳转会创建新的Activity,所以在startActivity()之后需要调用finish()销毁当前Activity,如果不销毁,多次跳转后,程序的Activity栈中会存放多个Activity,点击设备的返回按钮,会发现会一直向后退。

主要步骤:

1、新建Android项目,增加新布局文件other.xml,新增Activity类otherActivity.class,用于接受Intent并展示other.xml。

2、在MainActivity类中,声明一个Intent类,通过Intent的构造函数指明源和目标。

3、获得Intent后,使用Intent.putExtra()方法对其传入数据。

4、调用Activity.startActivity启动这个Intent。

5、在otherActivity类中,使用Activity.getIntent()获得当前Activity的Intent。

6、获得Intent后,使用Intent.getXxxExtra()方法获得其中保存的数据。

7、在AndroidManifest.xml配置otherActivity节点。

示例代码

步骤2--3:

1publicclassMainActivityextendsActivity {

2privateTextView textView;

3privateButton btn;

4@Override

5protectedvoidonCreate(Bundle savedInstanceState) {

6super.onCreate(savedInstanceState);

7setContentView(R.layout.activity_main);

8

9textView=(TextView)findViewById(R.id.textView1);

10btn=(Button)findViewById(R.id.button1);

11btn.setOnClickListener(newView.OnClickListener() {

12@Override

13publicvoidonClick(View v) {

14// Intent构造函数:Intent来源;Intent目的。

15Intent intent =newIntent(MainActivity.this,otherActivity.class);

16intent.putExtra("data", "当前是页面2,信息来自页面1");

17startActivity(intent);//启动Activity

18finish();

18}

19});

20}

21 } 步骤4--5:

1publicclassotherActivityextendsActivity {

2privateButton btn;

3privateTextView textView;

4@Override

5protectedvoidonCreate(Bundle savedInstanceState) {

6// TODO Auto-generated method stub

7super.onCreate(savedInstanceState);

8setContentView(R.layout.other);

9

10textView=(TextView)findViewById(R.id.textView2);

11btn=(Button)findViewById(R.id.button2);

12

13//通过Activity.getIntent()获取当前页面接收到的Intent。

14Intent intent =getIntent();

15//getXxxExtra方法获取Intent传递过来的数据

16String msg=intent.getStringExtra("data");

17textView.setText(msg);

18

19btn.setOnClickListener(newView.OnClickListener() {

20@Override

21publicvoidonClick(View v) {

22Intent intent=newIntent(otherActivity.this,MainActivity.class);

23startActivity(intent);

24finish();

25}

26});

27}

28 } 步骤7:

1<application

2android:allowBackup="true"

3android:icon="@drawable/ic_launcher"

4android:label="@string/app_name"

5android:theme="@style/AppTheme" >

6<activity

7android:name="cn.bgxt.IntentForAc.MainActivity"

8android:label="@string/app_name" >

9<intent-filter>

10<action android:name="android.intent.action.MAIN" />

11<category android:name="android.intent.category.LAUNCHER" />

12</intent-filter>

13</activity>

14<activity android:name=".otherActivity"/>

15</application>

从Activity中返回数据

上面例子中只是介绍了Activity通过Intent传递数据,然而在实际应用中,不仅仅需要向Activity传递数据,而且要从Activity中返回数据,虽然返回数据和传递数据类似,但是还是有部分区别。

主要区别如下:

1、传递数据需要使用Activity.startActivityForResult()方法启动Activity,需要传递请求码,而不是Activity.startActivity()。

2、返回数据的时候,调用Activity.setResult()方法设置返回Intent以及返回码。

3、需要重写源Activity的onActivityResult()方法以便于接受返回的Intent,在onActivityResult()中会判断请求码和响应码。

通过一个例子说明从Activity返回数据。此程序有两个Activity,在MainActivity中输入加法运算的计算数,跳转到otherActivity中输入计算结果,并在点击返回后,把计算结果输出到MainActivity中。

示例代码

MainActivity:

1publicclassMainActivityextendsActivity {

2

3privateEditText one,two,result;

4privateButton btn;

5

6@Override

7protectedvoidonCreate(Bundle savedInstanceState) {

8super.onCreate(savedInstanceState);

9setContentView(R.layout.activity_main);

10

11one=(EditText)findViewById(R.id.one);

12two=(EditText)findViewById(R.id.two);

13result=(EditText)findViewById(R.id.result);

14btn=(Button)findViewById(R.id.btnGo);

15btn.setOnClickListener(newView.OnClickListener() {

16

17@Override

18publicvoidonClick(View v) {

19// TODO Auto-generated method stub

20intione=Integer.parseInt(one.getText().toString());

21intitwo=Integer.parseInt(two.getText().toString());

22

23Intent intent=newIntent(MainActivity.this, otherActivity.class);

24intent.putExtra("one", ione);

25intent.putExtra("two", itwo);

26

27//启动需要监听返回值的Activity,并设置请求码:requestCode

28startActivityForResult(intent, 1);

29}

30});

31

32}

33

34@Override

35protectedvoidonActivityResult(intrequestCode,intresultCode, Intent data) {

36super.onActivityResult(requestCode, resultCode, data);

37//当otherActivity中返回数据的时候,会响应此方法

38//requestCode和resultCode必须与请求startActivityForResult()和返回setResult()的时候传入的值一致。

39if(requestCode==1&&resultCode==2)

40{

41intthree=data.getIntExtra("three", 0);

42result.setText(String.valueOf(three));

43}

44}

45

46@Override

47publicbooleanonCreateOptionsMenu(Menu menu) {

48// Inflate the menu; this adds items to the action bar if it is present.

49getMenuInflater().inflate(R.menu.main, menu);

50returntrue;

51}

52 } otherActivity:

1publicclassotherActivityextendsActivity {

2TextView tvShow;

3EditText etResult;

4@Override

5protectedvoidonCreate(Bundle savedInstanceState) {

6super.onCreate(savedInstanceState);

7setContentView(R.layout.other);

8

9tvShow=(TextView)findViewById(R.id.tvShow);

10etResult=(EditText)findViewById(R.id.etResult);

11

12Intent intent=getIntent();

13inta=intent.getIntExtra("one", 0);

14intb=intent.getIntExtra("two", 0);

15tvShow.setText(a+" + "+b+" = "+" ? ");

16

17Button btnResult=(Button)findViewById(R.id.btnReturn);

18btnResult.setOnClickListener(newView.OnClickListener() {

19@Override

20publicvoidonClick(View v) {

21//新声明一个Intent用于存放放回的数据

22Intent i=newIntent();

23intresult=Integer.parseInt(etResult.getText().toString());

24i.putExtra("three", result);

25setResult(2, i);//设置resultCode,onActivityResult()中能获取到

26finish();//使用完成后结束当前Activity的生命周期

27}

28});

29}

30 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。