Android百日程序:Intent传递数据

来源:互联网 发布:贪心算法的优缺点 编辑:程序博客网 时间:2024/04/30 03:58

上一遍是回传数据,当热Activity之间是可以利用Intent很方便地传递很多数据的。

本章就两个Activity之间传递String和Int数据。

1 主要界面:


2 点击按钮之后,就进入第二个activity


这个时候会利用Toast机制显示第一个activity传递什么String和Int给第二个activity。

3 然后点击“return to main activity”,回到第一个activity


同样会显示回传的信息


这样可以在activity之间来回传递需要的信息。


新建项目;

1 首先设计主界面,代码:

[html] view plain copy
 print?
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context="com.example.intenttest.MainActivity" >  
  6.   
  7.     <Button  
  8.         android:id="@+id/seconde_activity_btn"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="@string/activate_secondary"  
  12.         android:onClick="onClick" />  
  13.   
  14. </LinearLayout>  

就是构造一个LinearLayout,hold住一个Button按钮,android:onClick="onClick"表示这个按键响应的函数名为"onClick",在逻辑代码中定义好这个函数就可以了,如果没有定义这个函数,那么程序就会崩溃的。

2 构建第二个activity的界面,代码:

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <TextView  
  8.         android:id="@+id/txt_username"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:hint="@string/secondary_activity" />  
  12.   
  13.     <Button  
  14.         android:id="@+id/btn_OK"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:onClick="onClick"  
  18.         android:text="@string/return_to_main_activity" />  
  19.   
  20. </LinearLayout>  

构建一个文本和按钮

3 第一个activity的代码:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. package com.example.intenttest;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.view.Menu;  
  7. import android.view.MenuItem;  
  8. import android.view.View;  
  9. import android.widget.Toast;  
  10.   
  11. public class MainActivity extends Activity {  
  12.     /* 
  13.      * An integer value that identifies an activity you are calling. When an 
  14.      * Activity returns a value, you must have a way to identify it If the 
  15.      * request code is set to -1, then calling it using the 
  16.      * startActivityForResult() method is equivalent to calling it using the 
  17.      * startActivity() method. That is, no result will be returned. 
  18.      */  
  19.     int requestCode = 1;  
  20.   
  21.     public static <T> boolean equ(T t1, T t2) {  
  22.         return t1 == t2;  
  23.     }  
  24.   
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.activity_main);  
  29.     }  
  30.   
  31.     public void onClick(View view) {  
  32.         Intent i = new Intent("su.bill.intenttest.SecondaryActivity");  
  33.         i.putExtra(SecondaryActivity.extraStr, "Give you a string");  
  34.         i.putExtra(SecondaryActivity.extraInt, 15);  
  35.   
  36.         Bundle extras = new Bundle();  
  37.         extras.putString(SecondaryActivity.extraStr2, "String in data");  
  38.         extras.putInt(SecondaryActivity.extraInt2, 22);  
  39.   
  40.         i.putExtras(extras);  
  41.   
  42.         startActivityForResult(i, requestCode);  
  43.     }  
  44.   
  45.     @Override  
  46.     public void onActivityResult(int reqCode, int resCode, Intent data) {  
  47.         if (equ(reqCode, requestCode) && equ(resCode, RESULT_OK)) {  
  48.             Toast.makeText(this,  
  49.                     Integer.toString(data.getIntExtra(SecondaryActivity.extraInt3, 0)),  
  50.                     Toast.LENGTH_SHORT).show();  
  51.               
  52.             Toast.makeText(this,  
  53.                     data.getDataString(),   
  54.                     Toast.LENGTH_SHORT).show();  
  55.         }  
  56.     }  
  57.   
  58.     @Override  
  59.     public boolean onCreateOptionsMenu(Menu menu) {  
  60.         // Inflate the menu; this adds items to the action bar if it is present.  
  61.         getMenuInflater().inflate(R.menu.main, menu);  
  62.         return true;  
  63.     }  
  64.   
  65.     @Override  
  66.     public boolean onOptionsItemSelected(MenuItem item) {  
  67.         // Handle action bar item clicks here. The action bar will  
  68.         // automatically handle clicks on the Home/Up button, so long  
  69.         // as you specify a parent activity in AndroidManifest.xml.  
  70.         int id = item.getItemId();  
  71.         if (id == R.id.action_settings) {  
  72.             return true;  
  73.         }  
  74.         return super.onOptionsItemSelected(item);  
  75.     }  
  76. }  

和前一章的代码差不多,这里主要学习的函数是:

1) 让Intent带上String数据:

i.putExtra(SecondaryActivity.extraStr, "Give you a string");

2) 让Intent带上Int数据
i.putExtra(SecondaryActivity.extraInt, 15);

3)还可以使用Bundle数据结构,直接带上String和Int数据:
Bundle extras = new Bundle();
extras.putString(SecondaryActivity.extraStr2, "String in data");
extras.putInt(SecondaryActivity.extraInt2, 22);
i.putExtras(extras);

回传调用的函数onActivityResult还是和前一章一样。使用了Toast显示多个回传的数据。


4 然后是第二个activity的逻辑代码:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. package com.example.intenttest;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.net.Uri;  
  6. import android.os.Bundle;  
  7. import android.view.View;  
  8. import android.widget.Toast;  
  9.   
  10. public class SecondaryActivity extends Activity {  
  11.     public static String extraStr = "extra_string";  
  12.     public static String extraInt = "extra_int";  
  13.     public static String extraStr2 = "extra_string_2";  
  14.     public static String extraInt2 = "extra_int_2";  
  15.     public static String extraInt3 = "extra_int_3";  
  16.   
  17.     @Override  
  18.     public void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.         setContentView(R.layout.secondary_activity);  
  21.   
  22.         Toast.makeText(this, getIntent().getStringExtra(extraStr),  
  23.                 Toast.LENGTH_SHORT).show();  
  24.         Toast.makeText(this, String.valueOf(getIntent().getIntExtra(extraInt, 0)),  
  25.                 Toast.LENGTH_SHORT).show();  
  26.   
  27.         Bundle bundle = getIntent().getExtras();  
  28.         Toast.makeText(this, bundle.getString(extraStr2), Toast.LENGTH_SHORT)  
  29.                 .show();  
  30.         Toast.makeText(this, Integer.toString(bundle.getInt(extraInt2)),  
  31.                 Toast.LENGTH_SHORT).show();  
  32.     }  
  33.   
  34.     public void onClick(View v) {  
  35.         Intent i = new Intent();  
  36.   
  37.         i.putExtra(extraInt3, 28);  
  38.   
  39.         i.setData(Uri.parse("pass integer back to main activity"));  
  40.   
  41.         setResult(RESULT_OK, i);  
  42.   
  43.         finish();  
  44.     }  
  45.   
  46. }  

主要学习代码:

1)取得Intent中的String数据

getIntent().getStringExtra(extraStr)

2)取得Intent中的Int数据:

getIntent().getIntExtra(extraInt, 0)

3)回传String数据:

i.setData(Uri.parse("pass integer back to main activity"));

4)回传函数:

setResult(RESULT_OK, i);

也是利用Toast数据显示。

0 0
原创粉丝点击