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的时候,才会被触发一次

  • 相关阅读:
    周末之个人杂想(十三)
    PowerTip of the DaySorting Multiple Properties
    PowerTip of the DayCreate Remoting Solutions
    PowerTip of the DayAdd Help to Your Functions
    PowerTip of the DayAcessing Function Parameters by Type
    PowerTip of the DayReplace Text in Files
    PowerTip of the DayAdding Extra Information
    PowerTip of the DayPrinting Results
    Win7下IIS 7.5配置SSAS(2008)远程访问
    PowerTip of the DayOpening Current Folder in Explorer
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_forresult_15924102.html
Copyright © 2011-2022 走看看