通常Activity之间的通信有三种方式:单向不传参数通信、单项传参数通信和双向通信。

这几种传递方式都需要通信使者Intent。以下将用代码来辅助理解。

1、单向不传递参数通信

public class MainAct extends Activity{

  private Button mBtn=null;
  private final static int REQUEST_CODE=1;

  @Override
  public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mBtn=(Button)findViewById(R.id.mainBtn);
    mBtn.setOnClickListener(mlistener);
  }
  private OnClickListener mlistener=new OnClickListener(){
      @Override
     public void onClick(View v){

     //第一个参数为当前Activity的对象,第二个参数为所要通信的对象的类
       Intent intent=new Intent(MainAct.this, BActivity.class);
     startActivity(intent);

     }

  };
这样就可以从一个Activity跳转到另一个名为BActivity的界面了。

2、单项传参数通信 

  public void onClick(View v){
    Intent intent=new Intent();

    intent.setClass(MainActivity.this, BActivity.class);

    //通过putExtra(“name”,“values”)---键值对;传递一些额外的数据,如一个list数据、name等,

    //这个参数根据我们的需要来设定。

    intent.putExtra("str", "list");

    intent.putString("name", "linjiqin");

    intent.putInt("age", 24);

    startActivity(intent,);

    }

  其他代码与  “单向不传递参数通信” 一样,其实代码就多了金黄色的这一部分。

  除了Intent.putExtra方法,将参数传入之外,还可以用Bundle传入参数,如下:

  Bundle bundle = new Bundle();

  bundle.putString("name", "name");

  intent.putExtras(bundle);

3、双向通信

    Activity的双向通信:A传到B并从B返回值(我们所希望传回的值);

  1.MainAct中的代码如下:

    在MainAct中的其他代码与“单向不传递参数通信” 一样。

  public void onClick(View v){

     Intent intent=new Intent(MainAct.this, BActivity.class);

     intent.putExtra("name", "liming");

    //需要返回值时用该方法----从BActivity返回的值

    private final static int REQUEST=1;//(int类型)

     startActivityForResult(intent, REQUEST);

  }

  //为了容易区别各参数,进行了颜色标记

  //在BActivity 中获取返回值并进行处理

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

    if (requestCode==REQUEST){//判断传进来的请求码是否与发送的相同
      if (resultCode==BActivity.RESULT){//判断传进来的结果码是否与Bactivity发送的相同

        //获取传进来的数据也可以使用Intent intent=getIntent(); 获取
        Bundle bundle=data.getExtras();

        String str=bundle.getString("back");
        Toast.makeText(MainAct.this, str, Toast.LENGTH_LONG).show();
  }} } }

  2.在BActivity中写的代码: 

   public class BActivity extends Activity{

       public final static int RESULT=1;

        private TextView BTxt;

        private Button Btn;

    @Override
    protected void onCreate(Bundle savedInstanceState){

       super.onCreate(savedInstanceState);

       setContentView(R.layout.bactivity);

       BTxt=(TextView)findViewById(R.id.BTxt);

       Btn=(Button)findViewById(R.id.Btn);

       Intent intent=getIntent();

       Bundle bundle=intent.getExtras();//获取MainAct传来的数据

       String str=bundle.getString("name"); //对MainAct传来的数据进行处理

       BTxt.setText(str);

       Btn.setOnClickListener(mlistener);

   }

  //返回MainAct数据的代码

  private OnClickListener  mlistener=new OnClickListener(){

    @Override
    public void onClick(View v){

      Intent intent=new Intent();

      intent.putExtra("back", "Back Data");

      setResult(RESULT, intent);//返回给MainAct的数据

      finish();

    }

   };

 }

说明:

  用Intent intent=getIntent();或者 Bundle bundle=intent.getExtras();获取传来的数据。

String str=bundle.getString("str");获得前一个Activity传来的参数。

这里还需要返回给MainAct参数,用到了setResult(RESULT, intent);

这里的RESULT必须与前一个MainAct 的一致,否则就不能正常返回。而在MainAct通过

重写onActivityResult()来取得相应的返回值并进行处理。

Activity之间的通信的更多相关文章

  1. Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  2. Fragment的生命周期和Activity之间的通信以及使用

    Fragment通俗来讲就是碎片,不能单独存在,意思就是说必须依附于Activity,一般来说有两种方式把Fragment加到Activity,分为静态,动态. 静态即为右键单击,建立一个Fragme ...

  3. Android中BroadCast与Activity之间的通信

    在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...

  4. Fragmen和Activity之间的通信--接口和实现的分离(转)

    Fragmen和Activity之间的通信--接口和实现的分离(转) 分类: Android平台     在平板的开发过程中通常都会采用多个Fragment的实现方式,通常有一个为list的Fragm ...

  5. 【Android 应用开发】Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  6. Android中两个Activity之间简单通信

    在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...

  7. Activity生命周期 与 Activity 之间的通信

    一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...

  8. 适配器(adapter)与fragment之间、fragment与activity之间的通信问题

    一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...

  9. Fragment与Activity之间的通信

      我个人将Fragment与Activity间的通信比喻为JSP与Servlet间的通信,fragment中用接口的方式来进行与Activity的通信.通信的结果可以作为数据传入另一个Fragmen ...

随机推荐

  1. Centos中的Docker 配置:将loop-lvm改为derict-lvm

    重新装了个虚拟机,回顾一下最近三天的工作: Centos 查看版本 cat /etc/redhat-release yum -y upgrade 升级所有包,不改变软件设置和系统设置,系统版本升级,内 ...

  2. TableView使用CATransform3D特效动画

    效果一: 在代理方法中实现: - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell fo ...

  3. 树莓派_360wifi2_佳能MP236打印机

    入手树莓派后一直没时间弄,设想用360wifi做无线网卡,也一直不得解,今天成功写下经验 本人刷的是官方系统,版本为3.12.28,首先更新系统内核,参考以下网址: http://groenholdt ...

  4. DataSet读取XML

    string file = File.ReadAllText("c://123.xml", Encoding.Default); using (DataSet ds = new D ...

  5. .NET3.5中JSON用法以及封装JsonUtils工具类

    .NET3.5中JSON用法以及封装JsonUtils工具类  我们讲到JSON的简单使用,现在我们来研究如何进行封装微软提供的JSON基类,达到更加方便.简单.强大且重用性高的效果. 首先创建一个类 ...

  6. Fastcgi介绍和php中fastcgi的应用

    先看下FastCgi的一些解释: CGI全称是“通用网关接口”(Common Gateway Interface), 它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据. CGI描述 ...

  7. leetcode刷题: 002 Add Two Numbers

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  8. 模拟ATM机将输入的数据插入数据库

    ATM抽象类 public abstract class ATM { private double balance; private String idcard; private String pas ...

  9. Oracle优化查询技巧

    1. WHERE子句中的连接顺序:Oracle采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的 ...

  10. java与微信企业号交互

    微信企业号接收消息(使用SpringMVC): http://blog.csdn.net/omsvip/article/details/39480577 微信企业号api: http://qydev. ...