• Activity之间的通信


      通常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()来取得相应的返回值并进行处理。

  • 相关阅读:
    7-1 城市间紧急救援 (25 分)(最短路径:斯特拉算法)
    常见的MD5碰撞
    PHP常见绕过(更新ing)
    7-10 旅游规划 (25 分)
    杂记:用python向网页提交数据
    python学习日记
    NOIP2018提高组金牌训练营——搜索专题
    noip复习之拓扑排序
    NOIP2018提高组金牌训练营——字符串专题
    NOIP2018提高组金牌训练营——数论专题
  • 原文地址:https://www.cnblogs.com/huaqing-wkc/p/4915256.html
Copyright © 2020-2023  润新知