zoukankan      html  css  js  c++  java
  • startActivity-两种start 方式

    对于activity的启动有两种方式

    1.startActivity-这种方式比较简单,我们就不做讲解了

    2.startActivityForResult-这种启动方式可以实现父子activity双向数据的传递,下面我们就结合demo学习这种启动方式

    直接看代码

    下面有三个activity(HeadSetActivity-主activity,MyActivity1,MyActivity2),用的是同一个layout(activity_main.xml),具体如下

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <RelativeLayout
            android:id="@+id/abc"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >
    
            <TextView
                android:id="@+id/tv"
                android:layout_width="match_parent"
                android:layout_height="400dp"
                android:background="@drawable/select"
                android:gravity="center"
                android:textSize="30dp"
                android:text="main_activity"
                android:textColor="#ff0000" />
    
            <Button
                android:id="@+id/bt1"
                android:layout_width="170dp"
                android:layout_height="100dp"
                android:layout_below="@+id/tv"
                android:src="@drawable/select"
                android:text="activity_1"
                android:textColor="#ff0000" />
    
            <Button
                android:id="@+id/bt2"
                android:layout_width="170dp"
                android:layout_height="100dp"
                android:layout_alignParentRight="true"
                android:layout_below="@+id/tv"
                android:src="@drawable/select"
                android:text="activity_2"
                android:textColor="#ff0000" />
        </RelativeLayout>
    
    </LinearLayout>

    HeadSetActivity

    package com.example.alert;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class HeadSetActivity extends Activity {
        private TextView textView;
        private Button button1;
        private Button button2;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = (TextView) findViewById(R.id.tv);
            button1 = (Button) findViewById(R.id.bt1);
            button2 = (Button) findViewById(R.id.bt2);
            button1.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    //启动activity1
                    Intent intent = new Intent("activity_one");
                    startActivityForResult(intent, 1);
                }
            });
            button2.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    //启动activity2
                    Intent intent = new Intent("activity_two");
                    startActivityForResult(intent, 2);
                }
            });
    
        }
    //这个方法主要是接受子activity返回的数据的
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
            //requestCode 这个是启动子activity的时候,父activity给予的标签,父分组管理
            //resultCode 这个是子activity返回来的标签,是子activity分组管理
            //data里面是子activity返回来的数据
            if (requestCode == 1) {
                if (resultCode == 10) {
                    
                    String string = data.getExtras().getString("activity_finish");
                    textView.setText("com from activity 1 and finish"+" 
    " + string);
                    
                } else if (resultCode == 100) {
                    
                    String string = data.getExtras().getString("activity_no_finish");
                    textView.setText("com from activity 1 and no finish"+" 
    " + string);
                }
            } else if (requestCode == 2) {
                if (resultCode == 20) {
                    textView.setText("com from activity 2 and finish");
                } else if (resultCode == 120) {
                    textView.setText("com from activity 2 and no finish");
                }
    
            }
        }
    
    }

    MyActivity1

    package com.example.alert;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MyActivity1 extends Activity {
        private TextView textView;
        private Button button1;
        private Button button2;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = (TextView) findViewById(R.id.tv);
            textView.setText("i am activity1");
            button1 = (Button) findViewById(R.id.bt1);
            button1.setText("setresult but no finish");
            button2 = (Button) findViewById(R.id.bt2);
            button2.setText("setresult but and finish");
            button1.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    Intent intent = new Intent();
                    Bundle bundle = new Bundle();
                    bundle.putString("activity_no_finish", "i am no finish");
                    intent.putExtras(bundle);
    
                    //不传输数据
                    //MyActivity1.this.setResult(100);
                    //可以传输数据,数字是对应parent 中的resultCode
                    MyActivity1.this.setResult(100, intent);
    
                }
            });
            button2.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    Intent intent = new Intent();
                    Bundle bundle = new Bundle();
                    bundle.putString("activity_finish", "i am finish");
                    intent.putExtras(bundle);
                    MyActivity1.this.setResult(10,intent);
                    finish();
                }
            });
    
        }
    
    }

    MyActivity2

    package com.example.alert;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    
    public class MyActivity2 extends Activity {
        private TextView textView;
        private Button button1;
        private Button button2;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            textView = (TextView) findViewById(R.id.tv);
            textView.setText("i am activity2");
            button1 = (Button) findViewById(R.id.bt1);
            button1.setText("setresult but no finish");
            button2 = (Button) findViewById(R.id.bt2);
            button2.setText("setresult but and finish");
            button1.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    MyActivity2.this.setResult(120);
                    
                }
            });
            button2.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    MyActivity2.this.setResult(20);
                    finish();
                }
            });
    
        }
    }

    接下来我们直接演示结果

    从上面的结果我们可以总结如下

    1.startActivityForResult(intent, 1);第一个参数是父传子数据, 第二个参数是启动组号;

    setResult(100, intent),第一个参数是返回组号,第二个参数是返回数据

    两个组号定位onActivityResult 方法中的执行项

    2.setResult 仅仅是给父activity传递消息跟数据,并不会销毁当前activity,一般我们会在调用setResult方法以后,主动调用finish方法

    3.setResult 方法,当启动方式是startActivity的时候,这个方法无效,但也不会有什么异常

    4.两个不同的子activity 可以拥有完全一样的启动组好跟返回组号。毕竟onActivityResult方法,只有在子activity返回父activity的时候,才会被触发一次

  • 相关阅读:
    SpringMVC之@RequestParam @RequestBody @RequestHeader 等详解
    RabbitMQ基础介绍
    linux查看tomcat日志
    HTML-01
    Ajax和json
    使用VBScript实现设置系统环境变量的小程序
    WinForm中重绘TabControl选项卡标题
    Action向视图传值的6种方式
    C#中常用的系统内置委托
    C#中的扩展方法
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_forresult_15924102.html
Copyright © 2011-2022 走看看