`

Activity与Intent通信机制

阅读更多
1、使用Intent对象来指定一个Activity,并通过startActivity或startActivityForResult方法启动该Activity.以及在Activity之间传递数据:
public class MainActivity extends Activity {  
        private Button btn1,btn2;  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            LinearLayout view = new LinearLayout(this);  
            view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
              
            btn1 = new Button(this);  
            btn1.setId(1);  
            btn1.setText("使用类名开启另一个Activity");  
            btn1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  
      
            btn2 = new Button(this);  
            btn2.setId(2);  
            btn2.setText("使用action开启另一个Activity");  
            btn2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  
              
            view.addView(btn1);  
            view.addView(btn2);  
            setContentView(view);  
              
            btn1.setOnClickListener(listener);  
            btn2.setOnClickListener(listener);  
        }  
          
        private View.OnClickListener listener = new OnClickListener() {  
            @Override  
            public void onClick(View view) {  
                Intent intent = new Intent();  
                switch (view.getId()) {  
                case 1:  
                    intent.setClass(MainActivity.this, ResultActivity.class);  
                    intent.putExtra("name", "JAVA");  
                    startActivityForResult(intent, 222);  
                    break;  
                case 2:  
                    intent.setAction("forResult");  
                    MyData myData = new MyData();  
                    //使用putExtra传递自定义对象时,该对象必须实现序列化,该类中所有成员属性也必须实现序列化接口   
                    intent.putExtra("data", myData);  
                    startActivity(intent);  
                    break;  
                default:  
                    break;  
                }  
            }  
        };  
      
        @Override  
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
            //requestCode是请求码,即startActivityForResult(intent, 222)中的第二个参数   
            //resultCode是结果码,即setResult(333)中设置的数字   
            switch (requestCode) {  
            case 222:  
                if(resultCode == 333){  
                    Toast.makeText(this, "无结果返回...", Toast.LENGTH_LONG).show();  
                } else if(resultCode == 444){  
                    Toast.makeText(this, data.getStringExtra("result"), Toast.LENGTH_LONG).show();  
                }  
                break;  
            default:  
                break;  
            }  
        }  
    }

    public class ResultActivity extends Activity {  
        private Button btn1 , btn2;  
        private TextView tv;  
        private Intent intent;  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            // TODO Auto-generated method stub   
            super.onCreate(savedInstanceState);  
              
            intent = getIntent();  
              
            LinearLayout view = new LinearLayout(this);  
            view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,  
                    LayoutParams.FILL_PARENT));  
              
            tv = new TextView(this);  
            tv.setText("name is "+intent.getStringExtra("name"));  
            tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,  
                    LayoutParams.WRAP_CONTENT));  
              
            btn1 = new Button(this);  
            btn1.setId(1);  
            btn1.setText("Back1");  
            btn1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,  
                    LayoutParams.WRAP_CONTENT));  
              
            btn2 = new Button(this);  
            btn2.setId(2);  
            btn2.setText("Back2");  
            btn2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,  
                    LayoutParams.WRAP_CONTENT));  
              
            view.addView(tv);  
            view.addView(btn1);  
            view.addView(btn2);  
              
            btn1.setOnClickListener(listener);  
            btn2.setOnClickListener(listener);  
            setContentView(view);  
        }  
      
        private View.OnClickListener listener = new OnClickListener() {  
            @Override  
            public void onClick(View view) {  
                switch (view.getId()) {  
                case 1:  
                    setResult(333);  
                    break;  
                case 2:  
                    intent.putExtra("result", "带结果返回");  
                    setResult(444, intent);  
                    break;  
                default:  
                    break;  
                }  
                ResultActivity.this.finish();  
            }  
        };  
      
    }  

    public class Result2Activity extends Activity {  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.main);  
            MyData data = (MyData)getIntent().getSerializableExtra("data");  
            setTitle(data.value);  
        }  
    }  

public class MyData implements Serializable {  
    public String value = "this is test";  
}  


2、Intent指定Activity的方式


2.1 直接使用Class
   
intent.setClass(MainActivity.this, ResultActivity.class);

<activity Android:name=".ResultActivity"></activity>

2.2 使用Action
   
intent.setAction("forResult");
<activity android:name=".Result2Activity">
     <intent-filter>
           <action android:name="forResult"></action>
           <category android:name="android.intent.category.DEFAULT"></category>
     </intent-filter>
</activity>

    2.3 使用包名
  
 ComponentName cn = new ComponentName(MainActivity.this, "com.zj.activity.another.ActivityA");
intent.setComponent(cn);

<activity android:name=".another.ActivityA"></activity>

分享到:
评论

相关推荐

    Android应用:Intent打开另外一个Activity,Intent拨电话,Intent在2个Activity间传递参数

    在Android应用开发中,Intent是一种强大的机制,用于在组件之间进行通信。Intent不仅可以用来启动新的Activity,还可以启动服务、广播接收器等。本教程将详细讲解如何使用Intent来实现特定的功能,包括打开新的...

    Android利用Intent启动和关闭Activity

    但在大多数情况下,系统的Activity管理机制足以处理Activity的生命周期,无需手动调用`finish()`。 ```java // 关闭当前Activity finish(); ``` 此外,如果需要关闭之前启动的独立Activity,可以使用`finish...

    通过Intent实现Activity之间的切换,并传递数据

    在Android应用开发中,Intent是一种强大的机制,用于在组件之间建立通信桥梁,特别是在Activity之间进行切换和数据传递。本文将详细讲解如何通过Intent实现Activity之间的切换,并探讨如何利用Intent进行数据传递。 ...

    Android Activity和Intent机制.doc

    Activity是用户界面的主要载体,Intent则是一种消息传递机制,用于在不同的组件之间建立联系。 Activity是Android应用程序的基本构建块,它代表了用户可以看到并与其交互的屏幕。每个Activity都有自己的生命周期,...

    Activity 间intent传递有序排序的map集合

    在Android开发中,Intent是应用程序之间以及应用程序内部组件之间通信的主要机制。Intent不仅可以用来启动新的Activity,还可以在组件间传递数据。在这个场景中,我们关注的是如何在Activity之间通过Intent传递一个...

    Android笔记(3)---Activity和Intent

    在Android应用开发中,Activity和Intent是两个至关重要的概念,它们构成了Android应用程序的基本交互机制。这篇笔记我们将深入探讨这两个核心组件及其之间的关系。 首先,Activity是Android中的一个基础组件,可以...

    实验10 使用Intent进行通信

    总结来说,实验10涵盖了Android应用开发中的Intent通信机制、系统服务调用(拨打电话和发送短信)、权限管理以及用户界面交互等多个核心知识点。通过这个实验,开发者可以深入理解Android应用的运行机制,并提升实际...

    ex07_activity_intent.rar_Intent_android

    在Android应用开发中,Intent是一种强大的机制,用于在应用程序组件之间进行通信,是连接不同组件的桥梁。"ex07_activity_intent"这个压缩包文件很可能包含了一系列关于Android中Intent使用的教程或示例代码,让我们...

    布局Activity和intent

    Intent则是一种消息传递机制,它用于启动Activity或者服务,传递数据以及在组件间进行通信。 首先,我们来详细了解一下Activity。Activity是Android系统中用户界面的基本单元,每个Activity都有自己的生命周期,...

    Fragment与Activity之间通信实例

    在Android应用开发中,Fragment和Activity是两个核心组件,它们共同构建了...在给定的实例中,可能包含了对上述某些方法的实际应用,通过分析代码和调试,开发者可以更深入地理解Fragment与Activity之间的通信机制。

    实验七 使用Intent在Activity间传输数据

    通过这个实验,开发者不仅可以掌握Intent的基本用法,还能了解Android组件通信的核心机制。熟练运用Intent在Activity间传递数据,将极大地提升应用程序的交互性和用户体验。同时,理解Intent的显式与隐式使用方式,...

    Activity、Bundle、请求码与结果码、Intent、广播、服务 (二)

    请求码与结果码是Android中用于处理多Activity间通信的重要机制。当你在一个Activity中通过startActivityForResult(Intent intent, int requestCode)启动另一个Activity时,可以在第二个Activity中通过setResult(int...

    Android移动应用开发中Activity和Intent单元主要内容.pdf

    Activity作为Android四大组件之一,是用户与应用界面交互的主要入口,而Intent则扮演着不同组件间通信的重要角色。 Activity简介: Activity是Android应用程序中的一个窗口,用于展示用户界面并与用户进行交互。它...

    Activity_intent-filter

    `Intent Filter` 是 `Activity` 或 `BroadcastReceiver` 在清单文件(AndroidManifest.xml)中定义的一种机制,用于声明它们愿意处理的 `Intent` 类型。 1. **定义Intent Filter** 在 `AndroidManifest.xml` 文件...

    演示通过Intent在两个Activity间切换

    总结来说,Intent是Android开发中的核心组成部分,它使得组件之间的通信变得简单而灵活。通过Intent在Activity间切换,我们可以实现应用的导航逻辑,同时通过传递数据和处理返回结果,实现更复杂的功能。掌握Intent...

    显示Intent和隐式Intent启动Activity的示例

    总结,Intent是Android系统中的核心机制之一,它允许组件间进行通信并执行特定任务。显示Intent用于明确指定目标,而隐式Intent则依赖于Intent Filter来寻找合适的组件。了解和熟练使用Intent对于开发高质量的...

    启动服务并与activity通信

    本文将详细讨论如何启动Service以及Activity与Service之间的通信机制。 首先,我们来看启动Service的两种主要方式: 1. **显式启动(Explicit Start)**: 显式启动Service时,我们需要明确指定Service的类名。...

Global site tag (gtag.js) - Google Analytics