Android中使用Intent实现一般页面跳转和带参数页面跳转

版权声明:虽然我很菜,但我在努力! https://blog.csdn.net/qq_39331713/article/details/82905480

一、Intent介绍

Intent的理解

      Intent, 直译为意图, 也就是你想要做什么或想要去哪?

      IntentActivity, ServiceBroadcastReceiver这三个应用组件之间进行通信的信使,

      例如: 我要在Activity中启动另一个Actvity, 就必须使用Intent对象

      意图对象还可以携带数据

注意: Intent不是Android中的四大应用组件之一

Intent的分类

显示意图 : 明确指定的目标组件的意图

创建对象 : Intent(Context context, Class clazz)

何时使用 : 当操作当前自己应用的组件时使用

隐式意图 : 没有明确指定目标组件的意图

创建对象 : Intent(String action) 

何时使用 : 当操作其它应用的组件时使用

 IntentFilter的理解

     在配置Activity, 可以为Activity指定一个IntentFilter的配置

     •如果你的Activity希望其它应用能访问到, 需要配置<intent-filter>

     •如果你想启动其它应用的界面你必须用隐式intent, 且目标界面Activty配置了<intent-filter>

     •它的作用类似于web中的为Servlet配置的<url-pattern>

相关API 

Intent: 意图

      Intent(Context packageContext, Class<?> cls) 用于创建显示意图对象

      Intent(String action): 用于创建隐式意图对象

      putExtra(String name, Xxx value): 保存额外数据

      Xxx getXxxExtra(String name): 获取额外数据 

      setData(Uri data): 设置有特定格式的uri数据

Activity: 活动

      startActivity(Intent intent): 一般启动Activity

      startActivityForResult(int reqCode, Intent intent): 带回调启动Activity

      onActivityResult(int reqCode, int resultCode, Intent data): 回调方法

      setResult(int resultCode, Intent data): 设置要返回的结果

      finish(): 结束当前Activity 

      getIntent(): 得到启动Activity的意图

 二、代码示范

布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <EditText
        android:id="@+id/et_main_message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入您的信息">
    </EditText>
 
    <Button
        android:id="@+id/btn_main_start1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="一般启动" />
 
    <Button
        android:id="@+id/btn_main_start2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="带回调启动" />
 
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <EditText
        android:id="@+id/et_second_message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入您的信息">
    </EditText>
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="一般返回"
        android:onClick="back1"/>
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="带结果的返回"
        android:onClick="back2"/>
 
</LinearLayout>

 JAVA代码

MainActivity.java

package com.atguigu.l02_activity;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnClickListener {
 
    private EditText et_main_message;
    private Button btn_main_start1;
    private Button btn_main_start2;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        //初始化视图对象
        et_main_message = (EditText) findViewById(R.id.et_main_message);
        btn_main_start1 = (Button) findViewById(R.id.btn_main_start1);
        btn_main_start2 = (Button) findViewById(R.id.btn_main_start2);
        //设置点击监听
        btn_main_start1.setOnClickListener(this);
        btn_main_start2.setOnClickListener(this);
    }
 
    @Override
    public void onClick(View v) {//v就是发生事件的视图对象(操作的)
        if(v==btn_main_start1) {
            //Toast.makeText(this, "一般启动", 0).show();
            //1). 创建Intent对象(显式)
            Intent intent = new Intent(this, SecondActivity.class);
            //2). 通过intent携带额外数据
            String message = et_main_message.getText().toString();
            intent.putExtra("MESSAGE", message);
            //3). 启动Activity
            startActivity(intent);
             
        } else if(v==btn_main_start2) {
            //Toast.makeText(this, "带回调启动", 0).show();
             
            //1). 创建Intent对象(显式)
            Intent intent = new Intent(this, SecondActivity.class);
            //2). 通过intent携带额外数据
            String message = et_main_message.getText().toString();
            intent.putExtra("MESSAGE", message);
            //3). 带回调启动Activity
            int requestCode = 2;
            startActivityForResult(intent, requestCode);
        }
    }
     
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //判断code
        if(requestCode==2 && resultCode==3) {
            //从data中取出数据
            String result = data.getStringExtra("RESULT");
            //显示
            et_main_message.setText(result);
        }
    }
}

 SecondActivity.java

package com.atguigu.l02_activity;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
 
/**
 * 界面二
 * 
 * @author Administrator
 *
 */
public class SecondActivity extends Activity {
 
    private EditText et_second_message;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
         
        et_second_message = (EditText) findViewById(R.id.et_second_message);
         
        //4). 得到intent对象
        Intent intent = getIntent();
        //5). 通过intent读取额外数据
        String message = intent.getStringExtra("MESSAGE");
        //6). 显示到EditText
        et_second_message.setText(message);
    }
     
    public void back1(View v) {
        //关闭当前界面
        finish();
    }
     
    public void back2(View v) {
         
        //保存一个结果
        int resultCode = 3;
            //准备一个带额外数据的intent对象
        Intent data = new Intent();
        String result = et_second_message.getText().toString();
        data.putExtra("RESULT", result);
            //设置结果
        setResult(resultCode, data );
         
        //关闭当前界面
        finish();
    }
}

运行结果显示

带回调启动

带结果返回

注:此文章来自尚硅谷http://www.atguigu.com/课程学习资料总结

猜你喜欢

转载自blog.csdn.net/qq_39331713/article/details/82905480