Intent学习笔记

2018-01-05 10:56:55

什么是Intent
  • Intent可以理解为信使(意图)
  • 由Intent来协助完成Android各个组件之间的通讯
Intent实现页面之间的跳转
  • startActivity(intent)
  • startActivityForResult(intent, requestCode);

    onActivityResult(int RequestCode,int resultCode,Intent data)
    setResult(resultCode,data);
    
示例

新建两个activity,

  • FActivity.java内容如下
package com.example.nosay.myapplication;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class FActivity extends AppCompatActivity {

    private Button bt1;
    private Button bt2;
    private Context mContext;
    private TextView tv;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.factivity);

        /**
         * 通过点击bt1实现页面之间的跳转
         * 1.startActivity的方式实现跳转
         * 2.初始化Intent
         */
        mContext = this;
        tv = (TextView) findViewById(R.id.textView1);
        bt1 = (Button) findViewById(R.id.button1_first);
        bt2 = (Button) findViewById(R.id.button2_second);

        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /**
                 * 第一个参数:上下文对象this
                 * 第二个参数:目标文件
                 */
                Intent intent = new Intent(mContext,SActivity.class);
                startActivity(intent);
            }
        });

        bt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(mContext,SActivity.class);
                /**
                 * 第一个参数是Intent对象
                 * 第二个参数是请求的一个标识
                 */
                startActivityForResult(intent,1);
            }
        });
    }

    /**
     *通过startActivityForresult跳转,接收返回数据的方法
     * @param requestCode 请求标识
     * @param resultCode 第二个页面返回的标识
     * @param data 第二个页面回传的数据
     *
     */

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == 1 && resultCode == 2)
        {
            String Content = data.getStringExtra("data");
            tv.setText(Content);
        }
    }
}

  • SActivity.java内容如下
package com.example.nosay.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

public class SActivity extends AppCompatActivity {

    private Button bt;
    private String content = "你好";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sactivity);
        /**
         * 第二个页面什么进修给第一个页面回传数据
         * 回传第一个页面的实际上是一个intent对象
         */

        bt = (Button) findViewById(R.id.button5);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent data = new Intent();
                data.putExtra("data",content);
                setResult(2,data);
                //结束当前页面
                finish();
            }
        });
    }
}

新建两个布局文件,代码如下

factivity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button1_first"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="第一种启动方式" />

    <Button
        android:id="@+id/button2_second"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="第二种启动方式" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="把第二个页面回传的数据显示出来" />
</LinearLayout>

sactivity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />
</LinearLayout>

启动以后,点击第一种启动方式按钮完成跳转