zoukankan      html  css  js  c++  java
  • android学习笔记33_为应用添加多个Activity与参数传递

    33_为应用添加多个Activity与参数传递
    ------------------------------------------
    1.一个activity代表一个的窗口,那么一个应用中往往会有很多的窗口
      因而就有可能有多个activity.
    ----------------------------------------
    2.在一个Activity中可以使用系统提供的startActivity(Intent intent)方法打开新的Activity,在打开新的Activity前,你


    可以决定是否为新的Activity传递参数:


    第一种:打开新的Activity,不传递参数
    public class MainActivity extends Activity {
      @Override protected void onCreate(Bundle savedInstanceState) {
    .......
    Button button =(Button) this.findViewById(R.id.button);
                               button.setOnClickListener(new View.OnClickListener(){//点击该按钮会打开一个新的


    Activity
    public void onClick(View v) {
                              //新建一个显式意图,第一个参数为当前Activity类对象,第二个参数为你要打开的Activity类
       startActivity(new Intent(MainActivity.this, NewActivity.class));
    }});
             }
    }
    ---------------------------------------------------------------
    3.第二种:打开新的Activity,并传递若干个参数给它:
    public class MainActivity extends Activity {
      @Override protected void onCreate(Bundle savedInstanceState) {
    .......
    button.setOnClickListener(new View.OnClickListener(){//点击该按钮会打开一个新的Activity
             public void onClick(View v) {
              Intent intent = new Intent(MainActivity.this, NewActivity.class)
    Bundle bundle = new Bundle();//该类用作携带数据
    bundle.putString("name", "传智播客");
    bundle.putInt("age", 4);
    intent.putExtras(bundle);//附带上额外的数据
    startActivity(intent);
    }}); }
    }
    在新的Activity中接收前面Activity传递过来的参数:
    public class NewActivity extends Activity {
                @Override protected void onCreate(Bundle savedInstanceState) {
        ........
        Bundle bundle = this.getIntent().getExtras();
        String name = bundle.getString("name");
                        int age = bundle.getInt("age");
                }
    }
    ----------------------------------------------------------
    1.通过例子来说明
    ------------------------
      项目内容:当在MainActivity中点击按钮后,打开新的Activity,在新的Activity中
               显示:我是新Activity
    -------------------------------------------------------------
    2.注意新建一个activity的xml文件,命名的时候不要命名成:otherActivity.xml这样
      不会在R文件中生成.
    ------------------------------------------------------------------------
    3.通过这个方法就可以显示界面:
     a.在android中如何打开activity组件,需要用到意图,Intent,是用来激活组件
       还有一个作用是附带数据.
     b.Intent intent=new Intent();
    ------------------------------------------------
    4.activity之间传输数据:
      a.在MulActivity.java中
    Intent intent=new Intent();
        //第一种方法: intent.setClass(this, OtherActivity.class);//设置要激活的组件
    //第二种方法: intent.setClassName(this, "com.credream.mulActivity.OtherActivity");
        //第三种方法:intent.setComponent(new ComponentName(this, OtherActivity.class));
        //第二个是要激活的组件,从意图中得到组件进行激活
         //第四种做法:intent=new Intent(this,OtherActivity.class);
        intent.setClassName("com.credream.mulActivity", "com.credream.mulActivity.OtherActivity");//可以用于跨应用


    来激活组件
       //这几种方法,都是显式意图,因为都指定了类的路径等.
        //跨应用激活的作用是:第一个参数填写tell应用中的包,比如:
        //指定其他应用的包名就行了
       //这个意图对象是可以用来给另一个activity进行参数的传递
    //   intent.putExtra("company", "创梦网络");
    //    intent.putExtra("age", 4);
    //    传递参数的另一种方法
    Bundle bundle=new Bundle();
    bundle.putString("company", "CSDN");
    bundle.putInt("age",10);
    //适合参数的批量添加
    intent.putExtras(bundle);
    //意图对象中,底层源码,也是采用Bundle 来保存数据的
    //if(extras==null){
    // extras=new Bundle();
    //}
    //extras.putAll()
        startActivity(intent);
    ------------------------------------------
     b.接收OtherActivity.java
    package com.credream.mulActivity;


    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.TextView;
    //activity是一个组件,而组件要配置在清单文件中
    public class OtherActivity extends Activity
    {


    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    setContentView(R.layout.other);//指定界面的id,也就是界面对应的xml文件
    super.onCreate(savedInstanceState);
    Intent intent=getIntent(); //得到的意图对象是用于激活它的意图对象
    //String company=intent.getStringExtra("company");//就可以提取字符串的参数
    //int age=intent.getIntExtra("age", 0);//不存在这个值的时候,就用默认的参数0
    //另一种得到参数的方法
    Bundle bundle=intent.getExtras();
    String company=bundle.getString("company");
    int age=bundle.getInt("age");
    TextView textView= (TextView)this.findViewById(R.id.textView);
    textView.setText("公司名字:"+company+",成立"+age+"年了...");
    //运行项目,可以看到已经把参数传递过去了
    }


    }
    ---------------------------------------------------------------------
    4.当关闭一个activity的时候,把数据传给创建它的前一个activity的方法
      这个方法放到下面的代码中实现.
    ----------------------------------------------------------------------------
    5.创建MulActivity项目
    -----------------------
    a./MulActivity/src/com/credream/mulActivity/MulActivity.java
      package com.credream.mulActivity;




    import android.app.Activity;


    import android.content.ComponentName;


    import android.content.Intent;


    import android.os.Bundle;


    import android.view.View;


    import android.widget.Toast;




    public class MulActivity extends Activity {
      
      /** Called when the activity is first created. */
      
      @Override
       
     public void onCreate(Bundle savedInstanceState) {
     
           super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
       
     public void openActivity(View e){
      
      Intent intent=new Intent();
       
     //第一种方法: intent.setClass(this, OtherActivity.class);
    //设置要激活的组件


    //第二种方法: intent.setClassName(this,"com.credream.mulActivity.OtherActivity");
        
    //第三种方法:intent.setComponent(new ComponentName(this, OtherActivity.class));
       
    //第二个是要激活的组件,从意图中得到组件进行激活
         //第四种做法:intent=new Intent(this,OtherActivity.class);
      


      intent.setClassName("com.credream.mulActivity", "com.credream.mulActivity.OtherActivity");
    //可以用于跨应用来激活组件
      
     //这几种方法,都是显式意图,因为都指定了类的路径等.
       
     //跨应用激活的作用是:第一个参数填写tell应用中的包,比如:
        
    //指定其他应用的包名就行了
      
     //这个意图对象是可以用来给另一个activity进行参数的传递


    //   intent.putExtra("company", "创梦网络");


    //    intent.putExtra("age", 4);


    //    传递参数的另一种方法
    Bundle bundle=new Bundle();


    bundle.putString("company", "CSDN");


    bundle.putInt("age",10);
    //适合参数的批量添加
    intent.putExtras(bundle);


    //意图对象中,底层源码,也是采用Bundle 来保存数据的


    //if(extras==null){


    // extras=new Bundle();
    //}


    //extras.putAll()


    //---------------------------- 
     
    //startActivity(intent);


    //----------------------------


    //当需要接收打开的activity传回来的参数的时候
    startActivityForResult(intent, 200);


    //用这个可以获得新的activity返回的数据


    //第二个参数是请求码:请求码的作用是:告诉MulActivity,在它的代码的什么地方发出的一个请求


    //比如,在新的activity中给删除操作命名一个请求码=1,给添加操作一个请求吗=2,然后


    //MulActivity就可以根据请求码,判断这个结果是来自于什么操作,删除还是添加.


    //requestCode的作用是:请求码,作用是,告诉
        
        }
       
     /**
         
    * 用来得到对方所返回的数据,系统在得到otherActivity返回的数据的时候
      
       * 会调用onActivityResult方法,来把数据返回给程序员
      
       * int requestCode, int resultCode, Intent data
       
      * requestCode请求码,resultCode结果码,返回的数据:是一个意图对象
        
     * requestCode,告知在什么地方发起的请求
       
      * resultCode,告诉MulActivity,otherActivity在什么地方返回的数据
      
       * 
        
     */

    @Override


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


    String result=data.getStringExtra("result");

    Toast.makeText(this, result, 1).show();

    super.onActivityResult(requestCode, resultCode, data);


    }
    }
    ------------------------------------------------------------------------------------
    b./MulActivity/src/com/credream/mulActivity/OtherActivity.java
       package com.credream.mulActivity;


    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.TextView;
    //activity是一个组件,而组件要配置在清单文件中
    public class OtherActivity extends Activity
    {


    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
    setContentView(R.layout.other);//指定界面的id,也就是界面对应的xml文件
    super.onCreate(savedInstanceState);
    Intent intent=getIntent(); //得到的意图对象是用于激活它的意图对象
    //String company=intent.getStringExtra("company");//就可以提取字符串的参数
    //int age=intent.getIntExtra("age", 0);//不存在这个值的时候,就用默认的参数0
    //另一种得到参数的方法
    Bundle bundle=intent.getExtras();
    String company=bundle.getString("company");
    int age=bundle.getInt("age");
    TextView textView= (TextView)this.findViewById(R.id.textView);
    textView.setText("公司名字:"+company+",成立"+age+"年了...");
    //运行项目,可以看到已经把参数传递过去了
    }

    public void closeActivity(View v){
    //在关闭之前要设置返回数据
    Intent data=new Intent();
    data.putExtra("result", "国荣和张晓晓在小树林..");
    setResult(30,data);//返回的结果码和返回的数据
    //resultCode结果码的作用是为了告诉创建这个activity的
    //MulActivity,返回的结果数据是来自于这个activity的什么地方
    finish();//关闭Activity(关闭窗口)
    }


    }
    ----------------------------------------------
    c./MulActivity/res/layout/main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >


        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/hello" />
    <Button
        android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/button"
    android:onClick="openActivity"
        />
    </LinearLayout>
    --------------------------------------------------------
    d./MulActivity/res/layout/other.xml
      <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >


        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/content"
            android:id="@+id/textView" />
        <Button 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
       android:text="@string/closebutton"
     android:onClick="closeActivity"       
            />
    </LinearLayout>
    --------------------------------------------------------------------
    e./MulActivity/res/values/strings.xml
      <?xml version="1.0" encoding="utf-8"?>
    <resources>


        <string name="hello">Hello World, MulActivityActivity!</string>
        <string name="app_name">MulActivity</string>
         <string name="button">打开新的Activity</string>
          <string name="title">新的Activity</string>
           <string name="content">我是新的Activity</string>
              <string name="closebutton">关闭Activity</string>


    </resources>
    ------------------------------------

  • 相关阅读:
    使用Connector/C++(VS2015)连接MySQL的完整例子
    一个表里有多个字段需要同时使用字典表进行关联显示,如何写sql查询语句
    Delphi连接MySql(待测试验证,使用mysql.pas未通过)
    MySQL5.5.51启用网络远程连接
    delphi做的程序如何连接SQL数据库
    定时删除所有文件夹下的_desktop.ini文件
    Delphi中打开网页连接的几种方法
    SQL增删改查
    ADOConnection断线重连
    TDBGridEh 标头排序
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3000355.html
Copyright © 2011-2022 走看看