(Android第一行代码) 使用 Intent 在活动之间穿梭

 Intent:

   一:使用显式Intent.

         由主活动跳转到其他活动.

  使用步骤:

           first_layout.xml

              <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    

                          android:layout_width="match_parent"  

                          android:layout_height="match_parent"  

                          android:orientation="vertical" >   

                   <Button     

                          android:id="@+id/button_1"       

                           android:layout_width="match_parent"        

                           android:layout_height="wrap_content"   

                           android:text="Button 1"        

                              /> 

    </LinearLayout>

              public class firstActivity extends Activity {  

                       @Override 

               protected void onCreate(Bundle savedInstanceState) {

                       super.onCreate(savedInstanceState);  

                       requestWindowFeature(Window.FEATURE_NO_TITLE);  

                      setContentView(R.layout.first_layout); 

                       Button button1 = (Button) findViewById(R.id.button_1);

                       button1.setOnClickListener(new OnClickListener() {  

                       @Override

                      public void onClick(View v){

     } 

     });

  }

          1. 新建一个 second_layout.xml

                 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    

                          android:layout_width="match_parent"  

                          android:layout_height="match_parent"  

                          android:orientation="vertical" >   

                   <Button     

                          android:id="@+id/button_2"       

                           android:layout_width="match_parent"        

                           android:layout_height="wrap_content"   

                           android:text="Button 2"        

                              /> 

    </LinearLayout>

               2.新建活动 SecondActivity继承自 Activity。

                public class SecondActivity extends Activity {  

                       @Override 

               protected void onCreate(Bundle savedInstanceState) {

                       super.onCreate(savedInstanceState);  

                       requestWindowFeature(Window.FEATURE_NO_TITLE);  

                      setContentView(R.layout.second_layout);  }
}

              3.最后在 AndroidManifest.xml中为 SecondActivity进行注册。

           <application  

                   android:allowBackup="true"    

                   android:icon="@drawable/ic_launcher"    

                   android:label="@string/app_name" 

                   android:theme="@style/AppTheme" >   

                   <activity   

                         android:name=".FirstActivity"  

                         android:label="This is FirstActivity" >      

                         <intent-filter>          

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

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

                          </intent-filter> 

               </activity>    

               <activity android:name=".SecondActivity" > 

               </activity>

       </application>

          第二个活动已经创建完成.

          4.用显示Intent去启动这第 二个活动.

             修改 FirstActivity中按钮的点击事件,

                button1.setOnClickListener(new OnClickListener() {

                       @Override 

                 public void onClick(View v) {

                  //我们首先构建出了一个 Intent,传入 FirstActivity.this作为上下文,传入 SecondActivity.class 作为目标活动

                      Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

                      startActivity(intent);

                   }

             });

 


二.使用隐式 Intent

    使用步骤:(相比于显式 Intent,隐式 Intent 则含蓄了许多,它并不明确指出我们想要启动哪一个活 动,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent, 并帮我们找出合适的活动去启动。)

        1.通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的 action 和 category。

          打开 AndroidManifest.xml

          <activity android:name=".SecondActivity" >   

               <intent-filter>      

                 //只有<action>和<category>中的内容同时能够匹 配上 Intent中指定的 action和 category时,这个活动才能响应该 Intent。

                        <action android:name="com.example.activitytest.ACTION_START" />   

                //android.intent.category.DEFAULT 是一种默认的 category 

                        <category android:name="android.intent.category.DEFAULT" />

                  </intent-filter>

            </activity>

        2.修改 FirstActivity中按钮的点击事件

             button1.setOnClickListener(new OnClickListener() {

                @Override

             public void onClick(View v) {  

                //表 明我们想要启动能够响应 com.example.activitytest.ACTION_START 这个 action的活动

                         Intent intent = new Intent("com.example.activitytest.ACTION_START");  

                        startActivity(intent);

                    }

              });

 


三   更多隐式 Intent 的用法

  使用隐式 Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动

1.比如说你的应用程序中需要展示一个网页,这时你没有必要自己去实现一个浏览器(事实上也不太可能),而是只需要调用 系统的浏览器来打开这个网页就行了。

               button1.setOnClickListener(new OnClickListener() { 

                    @Override

                public void onClick(View v) { 

             //这里我们首先指定了 Intent的 action是 Intent.ACTION_VIEW,这是一个 Android系统内 置的动作,其常量值为 android.intent.action.VIEW

               Intent intent = new Intent(Intent.ACTION_VIEW);  

               intent.setData(Uri.parse("http://www.baidu.com"));  

               startActivity(intent); 

          } });

  2.我们的程序中利用tel调用系统拨号界面。

            button1.setOnClickListener(new OnClickListener() { 

                  @Override

              public void onClick(View v) { 

              Intent intent = new Intent(Intent.ACTION_DIAL); 

              intent.setData(Uri.parse("tel:10086")); 

              startActivity(intent); 

              }

            });

四 向下一个活动传递数据

    Intent中提供了一系列 putExtra()方法的重载,可 以把我们想要传递的数据暂存在 Intent 中,启动了另一个活动后,只需要把这些数据再从 Intent 中取出就可以了

  1.。比如说 FirstActivity 中有一个字符串,现在想把这个字符串传递到 SecondActivity

button1.setOnClickListener(new OnClickListener() { 

            @Override 

         public void onClick(View v) {  

         String data = "Hello SecondActivity"; 

         Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 

      //使用了putExtra.传数据。

         intent.putExtra("extra_data", data);  

         startActivity(intent); 

        }

});

2. 然后我们在 SecondActivity中将传递的数据取出。

public class SecondActivity extends Activity { 

          @Override

        protected void onCreate(Bundle savedInstanceState) { 

               super.onCreate(savedInstanceState);

               requestWindowFeature(Window.FEATURE_NO_TITLE);  

               setContentView(R.layout.second_layout);  

         //使用getIntent获得intent对象

               Intent intent = getIntent(); 

         //使用getStringExtra(键值)得到传递过来的数据。

               String data = intent.getStringExtra("extra_data"); 

              Log.d("SecondActivity", data);  }
 
}

五.返回数据给上一个活动

   使用 startActivityForResult()这个方法期望在活动销毁的时候能够返回一个结果给上一个活 动。

1.修改 FirstActivity 中按钮 的点击事件。

   button1.setOnClickListener(new OnClickListener() { 

          @Override 

       public void onClick(View v) { 

            Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 

    //startActivityForResult()方法接收两个参数,第一个参数还是 Intent,第二个参数是请求 码1.

           startActivityForResult(intent, 1); 

        }

    });

2.由于我们是使用 startActivityForResult()方法来启动 SecondActivity的,在 SecondActivity 被销毁之后会回调上一个活动的 onActivityResult()方法,因此我们需要在 FirstActivity 中重 写这个方法来得到返回的数据。

  @Override

 //参数requestCode即我们在启动活动时传 入的请求码1.

 //第二个参数 resultCode,即我们在SecondActivtiy返回数据时传入的处理结果

//第三个参数 data, 即携带着返回数据的 Intent

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

             switch (requestCode) {

            case 1:  

                    if (resultCode == RESULT_OK) { 

                        String returnedData = data.getStringExtra("data_return");   

                       Log.d("FirstActivity", returnedData);  

                   } 

                break; 

               default: 

           }

    }

3.接下来我们在 SecondActivity 中给按钮注册点击事件,并 在点击事件中添加返回数据的逻辑.

  public class SecondActivity extends Activity { 

          @Override 

        protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState); 

              requestWindowFeature(Window.FEATURE_NO_TITLE);

             setContentView(R.layout.second_layout); 

             Button button2 = (Button) findViewById(R.id.button_2); 

             button2.setOnClickListener(new OnClickListener() {

                     @Override  

                 public void onClick(View v) { 

                            Intent intent = new Intent(); 

                   //我们还是构建了一个 仅仅是用于传递数据Intent它没有指定任何的“意图”。

                            intent.putExtra("data_return", "Hello FirstActivity");    

                  /*setResult()方法专门用于向上一个活动返回数据的。

                      第一个参数用于向上一个活动返回处理结果一般只使用 RESULT_OK 或 RESULT_CANCELED 这两个值

                      第二个参数则是把带有数据的 Intent 传递回去

                      然后调用 了 finish()方法来销毁当前活动。*/

                             setResult(RESULT_OK, intent);   

                             finish();   

                     }  

                }); 

                    } 
           }

     SecondActivity已经成功返回数据给 FirstActivity了。

 4.如果用户在 SecondActivity中并不是通过点击按钮,而是通过按下 Back键回到 FirstActivity.,我们需要重写 onBackPressed()方法,

            @Override

        public void onBackPressed() { 

            Intent intent = new Intent();

            intent.putExtra("data_return", "Hello FirstActivity");

           setResult(RESULT_OK, intent); 

          finish();

 }

这样的话,当用户按下 Back 键,就会去执行 onBackPressed()方法中的代码,我们在这 里添加返回数据的逻辑就行了。

 

 

 

           

 

posted on 2016-11-24 22:48  blogchen  阅读(848)  评论(0编辑  收藏  举报

导航