转载

安卓开发 activity和intent初步学习

安卓开发 主要是以activity为基础

若要实现一个activity  必须要在AndroidManifest.xml这个文件进行注册

1 <activity 2             android:name=".FirstActivity" 3             android:label="This is the first activity which i code"> 4             <intent-filter> 5                 <action android:name="android.intent.action.MAIN" /> 6                 <category android:name ="android.intent.category.LAUNCHER"/> 7             </intent-filter>             8</activity>

<intent-filter>是一个意图筛选器  android.intent.action.MAIN和android.intent.category.LAUNCHER 就表明这是主活动和第一个启动的活动

intent可以用作两个activity直接的连接

1          Intent intent=new Intent(SecondActivity.this,ThirdActivity.class);                 2                 startActivity(intent);

这是显式调用两个活动

如果隐式调用 则要把action和category对应起来

1 public void onClick(View v) { 2                  3                    Intent intent=new Intent("com.example.activitytest.ACTION_START"); 4                    intent.addCategory("com.example.acivitytest.MY_Category"); 5                    startActivity(intent); 6                 } 7             });

如上建立一个Intent对象  实例化的时候传入一个字符串 就是在AndroidManifest.xml注册的action 每个活动的action只能有一个 而category可以有多个

如果intent不添加Category 那么默认的Category就是android.intent.category.DEFAULT

上文代码调用活动的AndroidManifest.xml如下

1 <activity  2              android:name=".SecondActivity"> 3              <intent-filter > 4                  <action android:name="com.example.activitytest.ACTION_START"/> 5                  <category android:name="android.intent.category.DEFAULT"/> 6                  <category android:name="com.example.acivitytest.MY_Category"/> 7              </intent-filter> 8</activity>

上面是一个activity启动另一个activity

如果要在两个activity之间传递消息呢? 那就要用intent的putExtra方法

1           String data ="hello "; 2                 Intent intent=new Intent(SecondActivity.this,ThirdActivity.class); 3                 intent.putExtra("test_data", data); 4                 startActivity(intent);

在ThirdActivity中要这样接受

1         Intent intent=getIntent();         2         String data=intent.getStringExtra("test_data"); 3         Log.d("ThirdActivity",data);

如果要从上一层返回给上一层呢?

那么在启动活动的时候不懂使用startActivity方法 而是要用startActivityForResult 并且多传入一个key进行对应

1 @Override 2             public void onClick(View v) { 3                 Intent intent=new Intent(SecondActivity.this,ThirdActivity.class); 4                 startActivityForResult(intent,1); 5             }

返回的时候要重写一个onBackPressed方法

1     @Override 2     public void onBackPressed(){ 3         Intent intent=new Intent(); 4         intent.putExtra("data_return", "hello second"); 5         setResult(RESULT_OK,intent); 6         finish(); 7     }

而在返回以后同样要重写一个接受的方法onActivityResult  有三个参数 如下代码

 1 protected void onActivityResult(int requestCode,int resultCode,Intent data)  2     {  3         switch(requestCode)  4         {  5             case 1:if(resultCode==RESULT_OK){  6                 String returnedData=data.getStringExtra("data_return");  7                 Log.d("secondActivity",returnedData);  8             }  9             break; 10             default: 11         } 12     }
正文到此结束
Loading...