zoukankan      html  css  js  c++  java
  • Activity和Intent

    一个界面就是一个Activity,不同的界面之间切换(单纯的转向或是传递数据转向)均需要 Intent 媒介,并通过使用 startActivity(myintent)或者startActivityForResult(myintent)实现。举例如下:

    代码1

     //单纯切换界面
    Intent myintent = new Intent(this,otherPage.class);
    startActivity(myintent);

    该段代码将从当前页面跳转到名为otherPage的界面。

    如果要传递数据给下一个页面,需要将数据绑定至Intent中。

    代码2

    Intent myintent = new Intent(this,otherPage.class);
    myintent.putExtra(“MY_DATA_NAME_1”,MY_stringDATA_1);
    myintent.putExtra(“MY_DATA_NAME_2”,MY_stringDATA_2);
    startActivity(myintent);

    如果传递的数据比较多,可以创建一个Bundle类,它是一种特别定义的Map类型,采用一名一值对应形式存储数据。

    代码3

    Bundle mybundle = new Bundle();
    mybundle.putString(“MY_DATA_NAME_1”,MY_stringDATA_1);
    mybundle.putString(“MY_DATA_NAME_2”,MY_stringDATA_2);
    mybundle.putInt(“MY_DATA_NAME_3”,MY_intDATA_3);
    Intent myintent = new Intent(this,otherPage.class);
    myintent.putExtras(mybundle);
    startActivity(myintent);

    *注意红色字体,在加入Bundle类型的数据到Intent中时,需要用到putExtras()方法。

    那么下一个页面该如何接受数据呢?对照代码2和代码3,分别看一下otherPage中的相关代码

    对照代码2

    Intent receiver = this.getIntent();
    String mydata1=receiver.getStringExtra(“MY_DATA_NAME_1”);
    String mydata2=receiver.getStringExtra(“MY_DATA_NAME_2”)

    对照代码3

    Bundle mydatas = this.getIntent().getExtras();
    String mydata1 = mydatas.getString(“MY_DATA_NAME_1”);
    String mydata2 = mydatas.getString(“MY_DATA_NAME_2”);
    int mydata3 = mydatas.getInt(“MY_DATA_NAME_3”);

    那么,如果我们需要从下一个页面取得返回值,供前一个页面使用呢?看看下面的代码

    代码4

    private static final int TAG_A = 0;
    private static final int TAG_B = 1;
    //some other codes here …
    Intent myintent = new Intent(this,nextPageA.class);
    startActivityForResult(myintent,TAG_A);
    /* some other codes here
     …  …  … */
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
          super.onActivityResult(requestCode, resultCode, intent);
         switch(requestCode){
         case TAG_A:
              //do something
              break;
         case TAG_B:
              //do something
              break;
          }
      }

    当使用startActivityForResult()方法时,都需要覆写onActivityResult()方法对返回值进行处理。注意startActivityForResult()中第二个int类型的参数,这个值是自定义的标记值,用来标记当前的intent。

    如果一个页面需要进行多次不同的跳转,并都需要接受返回值时,这个标记值将非常有用。因为所有使用了startActivityForResult()方法所得到的返回值都会在onActivityResult函数中被接收到。可以看到在onActivityReslut函数中,使用了switch(request)来对标记值进行判断,用来确定接收到的是哪个intent所发出的。

    再看看nextPageA中的代码,他是怎么执行返回值操作的。

    Intent back = new Intent();
    back.putExtra(“BACK_DATA_NAME”,BACK_DATA);
    setResult(RESULT_OK,back);
    //usually end this activity
    finish()

    通过setResult()方法来执行返回值操作。数值依然绑定在intent中进行传送。

    注意看setResult()方法中的第一个int类型参数,作用依然是标记值,用来判断执行成功与否。可以自定义,但必须从1开始(一般用不着自定义吧)。RESULT_OK是自带参数,它的值为-1,还有个自带参数RESULT_CANCELED,它的值为0。

    当发生特殊情况,比如产生返回值的activity崩溃了,这个参数将自动设为RESULT_CANCELED。在接受返回值的activity中的onActivityResult()方法中,resultCode就是对应的这个标记值。

  • 相关阅读:
    数据预处理
    数据挖掘-聚类分析
    数据挖掘分类--判别式模型 ----支持向量机
    神经网络
    数据挖掘-贝叶斯定理
    数据挖掘之分类和预测
    关于stm32的IO口的封装
    星际炸弹——炸弹爆炸时间计算
    共阳极数码管三极管驱动
    自定义的TIME.H头文件
  • 原文地址:https://www.cnblogs.com/tt_mc/p/1678699.html
Copyright © 2011-2022 走看看