Android 四大组件


1、使用Intent对象来指定一个Activity,并通过startActivity或startActivityForResult方法启动该Activity.以及在Activity之间传递数据:

 
  1. public class MainActivity extends Activity {  
  2.       
  3.     private Button btn1,btn2;  
  4.     @Override  
  5.     public void onCreate(Bundle savedInstanceState) {  
  6.         super.onCreate(savedInstanceState);  
  7.         LinearLayout view = new LinearLayout(this);  
  8.         view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
  9.           
  10.         btn1 = new Button(this);  
  11.         btn1.setId(1);  
  12.         btn1.setText("使用类名开启另一个Activity");  
  13.         btn1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  
  14.   
  15.         btn2 = new Button(this);  
  16.         btn2.setId(2);  
  17.         btn2.setText("使用action开启另一个Activity");  
  18.         btn2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  
  19.           
  20.         view.addView(btn1);  
  21.         view.addView(btn2);  
  22.         setContentView(view);  
  23.           
  24.         btn1.setOnClickListener(listener);  
  25.         btn2.setOnClickListener(listener);  
  26.     }  
  27.       
  28.     private View.OnClickListener listener = new OnClickListener() {  
  29.         @Override  
  30.         public void onClick(View view) {  
  31.             Intent intent = new Intent();  
  32.             switch (view.getId()) {  
  33.             case 1:  
  34.                 intent.setClass(MainActivity.this, ResultActivity.class);  
  35.                 intent.putExtra("name""JAVA");  
  36.                 startActivityForResult(intent, 222);  
  37.                 break;  
  38.             case 2:  
  39.                 intent.setAction("forResult");  
  40.                 MyData myData = new MyData();  
  41.                                 //使用putExtra传递自定义对象时,该对象必须实现序列化,该类中的所有成员属性也必须实现序列化接口   
  42.                                 intent.putExtra("data", myData);  
  43.                 startActivity(intent);  
  44.                 break;  
  45.             default:  
  46.                 break;  
  47.             }  
  48.         }  
  49.     };  
  50.   
  51.   
  52.   
  53.     @Override  
  54.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  55.         //requestCode是请求码,即startActivityForResult(intent, 222)中的第二个参数   
  56.         //resultCode是结果码,即setResult(333)中设置的数字   
  57.         switch (requestCode) {  
  58.         case 222:  
  59.             if(resultCode == 333){  
  60.                 Toast.makeText(this"无结果返回...", Toast.LENGTH_LONG).show();  
  61.             } else if(resultCode == 444){  
  62.                 Toast.makeText(this, data.getStringExtra("result"), Toast.LENGTH_LONG).show();  
  63.             }  
  64.             break;  
  65.         default:  
  66.             break;  
  67.         }  
  68.     }  
  69. }  

 

 
  1. public class ResultActivity extends Activity {  
  2.     private Button btn1 , btn2;  
  3.     private TextView tv;  
  4.     private Intent intent;  
  5.     @Override  
  6.     protected void onCreate(Bundle savedInstanceState) {  
  7.         // TODO Auto-generated method stub   
  8.         super.onCreate(savedInstanceState);  
  9.           
  10.         intent = getIntent();  
  11.           
  12.         LinearLayout view = new LinearLayout(this);  
  13.         view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,  
  14.                 LayoutParams.FILL_PARENT));  
  15.           
  16.         tv = new TextView(this);  
  17.         tv.setText("name is "+intent.getStringExtra("name"));  
  18.         tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,  
  19.                 LayoutParams.WRAP_CONTENT));  
  20.           
  21.         btn1 = new Button(this);  
  22.         btn1.setId(1);  
  23.         btn1.setText("Back1");  
  24.         btn1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,  
  25.                 LayoutParams.WRAP_CONTENT));  
  26.           
  27.         btn2 = new Button(this);  
  28.         btn2.setId(2);  
  29.         btn2.setText("Back2");  
  30.         btn2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,  
  31.                 LayoutParams.WRAP_CONTENT));  
  32.           
  33.         view.addView(tv);  
  34.         view.addView(btn1);  
  35.         view.addView(btn2);  
  36.           
  37.         btn1.setOnClickListener(listener);  
  38.         btn2.setOnClickListener(listener);  
  39.         setContentView(view);  
  40.     }  
  41.   
  42.     private View.OnClickListener listener = new OnClickListener() {  
  43.         @Override  
  44.         public void onClick(View view) {  
  45.             switch (view.getId()) {  
  46.             case 1:  
  47.                 setResult(333);  
  48.                 break;  
  49.             case 2:  
  50.                 intent.putExtra("result""带结果返回");  
  51.                 setResult(444, intent);  
  52.                 break;  
  53.             default:  
  54.                 break;  
  55.             }  
  56.             ResultActivity.this.finish();  
  57.         }  
  58.     };  
  59.   
  60. }  

 

 
  1. public class Result2Activity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.         super.onCreate(savedInstanceState);  
  5.         setContentView(R.layout.main);  
  6.         MyData data = (MyData)getIntent().getSerializableExtra("data");  
  7.         setTitle(data.value);  
  8.     }  
  9. }  

 

 
  1. public class MyData implements Serializable {  
  2.     public String value = "this is test";  
  3. }  

 

2、Intent指定Activity的方式

2.1 直接使用Class

    code

intent.setClass(MainActivity.this, ResultActivity.class);

    manifest

<activity Android:name=".ResultActivity"></activity>

2.2 使用Action

   code :

intent.setAction("forResult");

manifest :

<activity android:name=".Result2Activity">
            <intent-filter>
                <action android:name="forResult"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>

2.3 使用包名

code :

ComponentName cn = new ComponentName(MainActivity.this, "com.zj.activity.another.ActivityA");

  intent.setComponent(cn);

manifest:

<activity android:name=".another.ActivityA"></activity>

  • 1
  • 2
  • 3
  • 下一页
【内容导航】
第1页:Activity与Intent通信机制 第2页:Service实现原理以及AIDL语言的使用详解
第3页:BroadcastReceiver广播事件处理以及与Notification的配合使用详解

相关内容