`

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与IntentFilter

    Understanding Intent and IntentFilter–理解Intent和IntentFilterIntent(意图)在Android中是一个十分重要的...Intent和IntentFilter是Android和一种消息通信机制,可以让系统的组件之间进行通信。信息的载体就是Int

    Android中进程之间通信的机制

    总结:跨进程访问Activity(访问其他应用程序中...当然,传递数据也可以通过Intent来完成。传递数据的过程可以是双向的。如果要想从调用的Activity中返回数据,就需要使用startActivityForResult方法来启动Activity了。

    六、组件通信与广播消息-Android开发与实践

    了解使用Intent进行组件通信的原理 掌握使用Intent启动Activity的方法 掌握获取Activity返回值的方法 了解Intent过滤器的原理与匹配机制 掌握发送和接收广播消息的方法

    Activity代理框架AyoActivityNoManifest.zip

    目的在于在Activity之间传递参数时考虑序列化问题,适用于进程内通信提供了一个轻量级的OnActivityResult机制(OnResultCallback,使用方式基本和OnActivity不一样)状态栏一体化的简单封装Activity和Fragment状态...

    Android开发实现的Intent跳转工具类实例

    Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件...

    Android开发与应用——张荣,原书配套课件

    7.4 Android多线程通信机制 7.5 小结 练习 第8章 网络通信 8.1 通过HTTP访问网络 8.1.1 测试用Web服务器 8.1.2 WebView组件 8.1.3 HttpURLConnection 8.2 Socket编程 8.3 数据的解析 8.3.1 JSON...

    Android IPC机制绑定Service实现本地通信

    **写作原因:跨进程通信的实现和理解是Android进阶中...相比第一种方式,bindService()能够更加灵活地实现与启动端Activity的数据通信,第一种启动方式启动Activity与Service之间并没有直接关联,难以直接实现通信(当

    深入理解Android组件间通信机制对面向对象特性的影响详解

    比如Activity,Service,BroadcastReceiver,你没有办法去创建一个Activity,Service或BroadcastReceiver,然后像使用其他类那样的调用其上的接口与其通信,用Setters和Getters改变属性等等。这也决定了,组件

    android 面试2

    22、简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver 答:activity呈现了一个用户可以操作的可视化用户界面 service不包含可见的用户界面,而是在后台无限地运行可以连接到...

    计算机毕业设计 - Android系统原理与开发要点详解-培训课件,保证可靠运行,计算机毕业生可参考,免费资源下载

    接着,课件详细讲解了Android开发的关键技术和要点,包括Activity和Service的生命周期管理、Intent和BroadcastReceiver的通信机制、数据存储和访问、网络编程以及UI设计等。通过结合实例和代码演示,使开发者能够...

    Android实例代码

    第5章、使用Intent和IntentFilter进行通信 5.1、Intent对象详解: 5.2、Intent的属性及intent-filter配置:Component属性; Action、Category属性与intent-filter配置; Data、Type属性与intent-filter配置; Extra...

    疯狂Android讲义源码

    第5章、使用Intent和IntentFilter进行通信 第6章、Android应用的资源 第7章、图形与图像处理 第8章、Android的数据存储和IO 第9章、使用ContentProvider实现数据共享 第10章、Service与BroadcastReceiver 第11章、...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    Action、Category属性与intent-filter配置; Data、Type属性与intent-filter配置; Extra属性; 5.3、使用Intent创建Tab页面: 第6章、Android应用的资源 6.1、资源的类型及存储方式: 6.2、使用字符串、颜色、...

    疯狂Android讲义.part2

    3.3.1 回调机制与监听机制 156 3.3.2 基于回调的事件传播 158 3.3.3 重写onTouchEvent方法响应 触摸屏事件 160 3.4 响应的系统设置的事件 162 3.4.1 Configuration类简介 162 3.4.2 重写onConfigurationChanged 响应...

    疯狂Android讲义.part1

    3.3.1 回调机制与监听机制 156 3.3.2 基于回调的事件传播 158 3.3.3 重写onTouchEvent方法响应 触摸屏事件 160 3.4 响应的系统设置的事件 162 3.4.1 Configuration类简介 162 3.4.2 重写onConfigurationChanged 响应...

    新版Android开发教程.rar

    开放手机联盟, Open Handset Alliance :是美国 Google 公司与 2007 年 11 月 5 日宣布组建的一个全球性的联 盟组织。这一联盟将会支持 Google 发布的 Android 手机操作系统或者应用软件,共同开发名为 Android 的 ...

    Android典型技术模块开发详解

    3.4 Activity之间通信 3.4.1 Activity传递一般类型 3.4.2 Activity传递对象类型 3.4.2 Activity回传数据 3.5 Activity加载模式 3.6 本章小结 第4章 Intent (意图) 4.1 显式Intent 4.2 隐式Intent 4.2.1 ...

Global site tag (gtag.js) - Google Analytics