适合小白,我就是小白。
Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来完成请求。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION给Android,Android就会根据Intent的请求内容,查询各组件注册时声明的IntentFilter,找到网页浏览器的Activity来浏览网页。
Android的三个基本组件——Activity,Service和Broadcast Receiver——都是通过Intent机制激活的,不同类型的组件有不同的传递Intent方式.
(具体方法百度很多,写的都不错。)
实例:
新建项目(new-project),是空的,还是基本的看自己喜欢。
项目名称看自己喜欢。
默认是这两个主要文件,MainActivity.java和content_main.xml,打开的位置看左面:
要增加两个文件,实现intent跳转进行数据传递:
基本文件准备完成,要修改androidmanifest.xml增加SecondActivity文件,不然无法跳转,我开始就卡要这里了。没加,程序执行不了。增加也很简单,基本都可以自动生成。
下面就是代码:
MainActivity.java代码,第一行不要复制,除非我们起的名字一样,这里有些库可能用不取,我懒的改,反正多了也没事:
package com.example.intent;
import android.content.Intent;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
//声明控件对象
private EditText editText1;
private EditText editText2;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件的对象
editText1 = findViewById(R.id.edit_1);
editText2 = findViewById(R.id.edit_2);
button = findViewById(R.id.button);
//为Button绑定监听器
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取文本输入框中的内容
String editTextStr1 = editText1.getText().toString();
String editTextStr2 = editText2.getText().toString();
//创建intent对象,参数分别为上下文、要跳转的Activity类
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
//将要传递的值附加到Intent对象中暂时保存
intent.putExtra("extra_data1", editTextStr1);
intent.putExtra("extra_data2", editTextStr2);
//启动该intent对象,实现Activity跳转
startActivity(intent);
}
});
}
}
content_main.xml代码,就把三个控件的代码复制过去就行了,其他不动:
<EditText
android:id="@+id/edit_1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/edit_2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"
android:textAllCaps="false" />
secondActivity.java内容,依然不要复制第一行。
package com.example.intent;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class SecondActivity extends AppCompatActivity {
//声明TextView对象
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//获取TextView控件对象
textView = findViewById(R.id.text_view);
//获取启动该Activity的Intent对象
Intent intent = getIntent();
//获取Intent中暂存的数据
String data1 = intent.getStringExtra("extra_data1");
String data2 = intent.getStringExtra("extra_data2");
//将MainActivity中两个输入框的输入的内容一同在SecondActivity的TextView控件中显示出来
textView.setText(data1 + " " + data2);
}
}
activity_second.xml文件,只有一个控制,加进去就行了,其他不动。
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="50dp"
android:text="TextView" />
运行结果:
点击button后的结果: