【Android( Intent实现活动之间的交互)】实践是知识的母亲,知识是生活的明灯。这篇文章主要讲述Android: Intent实现活动之间的交互相关的知识,希望能为你提供帮助。
Intent的作用:是android中各个组件直接交互的一种重要方式,且利用Intent可以启动Activity、Service以及Broadcast Receiver。
Intent的创建:显示和隐式。
接下来,使用代码演示Intent的各种应用。
1、首先,创建一个工程,然后在res/layout目录下新建两个布局文件,分别是activity_main.xml和second.xml,代码如下
activity_main.xml
< ?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.banniyang.intentdome.MainActivity"> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> < Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button1"/> < /LinearLayout>
second.xml
< ?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.banniyang.intentdome.MainActivity"> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Second Hello World!" /> < Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button2"/> < /LinearLayout>
在activity_main.xml中添加一个TextView和Button,并且标记Button1的唯一ID为button1,
在second.xml中添加一个TextView和Button,并且标记Button2的唯一ID为button2。
2、然后在/app/src/main/java目录下新建一个活动second,使其继承AppCompatActivity,然后重写onCreate()方法,代码如下:
public class Second extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); //layout资源文件下的布局文件 } }
3、在AndroidMainfest.xml工程配置文件中注册活动second
< ?xml version="1.0" encoding="utf-8"?> < manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.banniyang.intentdome"> < application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> < activity android:name=".MainActivity"> < intent-filter> < action android:name="android.intent.action.MAIN" /> < category android:name="android.intent.category.LAUNCHER" /> < /intent-filter> < /activity> < activity android:name=".Second"> < /activity> < /application> < /manifest>
4、MainActivity.java的具体代码如下
public class MainActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //实现活动之间的跳转,显式构建 Intent intent = new Intent(MainActivity.this, Second.class); //启动intent startActivity(intent); } }); } }
上面Intent的构建采用的是显式的方式,下面用隐式的方法,即不明确指出要启动哪个活动,而是抽象的指定一系列的action和category等信息
1、打开AndroidManifest.xml文件重新编写activity的内容
< ?xml version="1.0" encoding="utf-8"?> < manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.banniyang.intentdome"> < application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> < activity android:name=".MainActivity"> < intent-filter> < action android:name="android.intent.action.MAIN" /> < category android:name="android.intent.category.LAUNCHER" /> < /intent-filter> < /activity> < activity android:name=".Second"> < intent-filter > < action android:name="com.example.intentdome.ACTION_START"/> < category android:name="android.intent.category.DEFAULT"/> < /intent-filter> < /activity> < /application> < /manifest>
2.重新编写MainActivity.java的按钮点击事件
public class MainActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { /*//实现活动之间的跳转,显式构建 Intent intent = new Intent(MainActivity.this, Second.class); //启动intent startActivity(intent); */ Intent intent = new Intent("com.example.intentdome.ACTION_START"); startActivity(intent); } }); } }
运行可以得到同样的结果。
使用隐式启动其他程序内部活动
示例:通过自己本程序去调用系统的浏览器来打开一个博客的网页操作
重新编写MainActivity.java的按钮点击事件
public class MainActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //打开浏览器应用 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.cnblogs.com/longzhongren/")); startActivity(intent); } }); } }
Intent实现活动中数据的传递 设置数据
Intetn提供了一个putExtra()方法用于以键-值对的形式进行数据的存放,将传递的数据存放在Intent中,
启动一个活动到另一个活动时,只需要从Intent中获取数据即可
1、重新编写MainActivity.java的按钮点击事件
public class MainActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,SecondActivity.class); intent.putExtra("data", "Hello SecondActivity"); startActivity(intent); } }); } }
获取数据
可以通过getStringExtra()方法获取存放的数据
2、重新编写Second.java的按钮点击事件
public class Second extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); Button button2 = (Button)findViewById(R.id.button2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String tmp = getIntent().getStringExtra("data"); Toast.makeText(Second.this, tmp, Toast.LENGTH_SHORT).show(); } }); } }
getIntent()解释:Return the intent that started this activity.
文章图片
携带数据返回上一个活动1、重新编写MainActivity.java的按钮点击事件
public class MainActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,SecondActivity.class); //第一个参数:Intent对象,第二个参数:请求的结果码 startActivityForResult(intent, 1); } }); } }
2、重新编写Second.java的按钮点击事件
public class Second extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second); Button button2 = (Button)findViewById(R.id.button2); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); //设置要返回的值 intent.putExtra("data_return", "我已经返回上一层了"); //设置返回结果 setResult(RESULT_OK, intent); //结束当前activity finish(); } }); } }
由于设置了starActivityForReturn()方法来启动Second,在Second被销毁之后会调用一个活动的onActivityResult()方法,所以要
3、在MainActivity.java中添加onActivityResult()方法
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case 1: if (resultCode == RESULT_OK) { Toast.makeText(this, data.getStringExtra("data_return"), Toast.LENGTH_SHORT).show(); } break; default: break; } }
程序猿必读
推荐阅读
- Android_Layout
- Android广播机制的深入学习
- Android五大布局之一相对布局(RelativeLayout)
- Android开发之五大布局篇
- Android 颜色大全color.xml
- 算法设计(解决乘积数组问题|S2 (使用O(1)空间))
- Perl goto语句用法详细介绍
- 8085微处理器中断详细介绍
- C语言中如何初始化静态变量(代码实例)