• Android学习(八) 打开Activity


    在Android中打开窗口有两种方式,第一种是不需要返回值的,第二种是带返回值的。

    Main.xml文件,程序从这个窗口开始执行。

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:orientation="vertical">
    
        <Button
            android:id="@+id/btn_open1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="第一种方式打开" />
    
        <Button
            android:id="@+id/btn_open2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="第二种方式打开" />
    
    </LinearLayout>

    FirstActivity.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" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="第一个窗口" />
        
    </LinearLayout>

    SecendActivity.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" >
    
        <TextView
            android:id="@+id/textView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="第二个窗口" />
    
        <Button
            android:id="@+id/btnresult"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            android:text="回传数据"/>
    
    </LinearLayout>

    main.java

    package com.example.demo;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Intent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        Button btn_open1;
        Button btn_open2;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //第一种方式打开窗口,无返回值
            btn_open1 = (Button) findViewById(R.id.btn_open1);
            btn_open1.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // 第一个为当前类的上下文参数,不能直接使用this,需要使用类名.this
                    // 第二个参数为目标文件的反射对象
                    Intent intent = new Intent(MainActivity.this, FirstActivity.class);
                    // 启动新窗口,不需要返回值
                    startActivity(intent);
                }
            });
    
            //第二种打开方式,带返回值得
            btn_open2 = (Button) findViewById(R.id.btn_open2);
            btn_open2.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // 第一个为当前类的上下文参数,不能直接使用this,需要使用类名.this
                    // 第二个参数为目标文件的反射对象
                    Intent intent = new Intent(MainActivity.this, SecendActivity.class);
    
                    // 第一个参数为intent
                    // 第二个参数为请求的标志,用来区别提交的activity
                    startActivityForResult(intent, 1);
                }
            });
        }
    
        /**
         * 通过这个方法用来接收新页面的返回数据,返回内容为Intent对象
         * 第一个参数为请求的id,第一个页面传递过来的标志,用来区别是哪个activity传递过来的。 第二个参数为结果的id,第二个页面返回的标志
         * 第三个参数为返回的intent对象,通过他获取跳转页面的返回内容
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
    
            //requestCode判断是哪个按钮提交的请求,用来区分提交的请求
            //resultCode判断是哪个页面返回的结果,用来区分返回的页面请求。
            if (requestCode == 1 && resultCode == 2) {
                String content = data.getStringExtra("data");
                Toast.makeText(this, content, 1).show();  //弹出消息框
            }
        }
    
    }

    SecendActivity.java

    package com.example.demo;
    
    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;
    
    public class SecendActivity extends Activity {
    
        Button btn;
        String content = "第二个窗口返回的数据";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.secend_activity);
    
            btn = (Button) findViewById(R.id.btnresult);
    
            btn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent data = new Intent();  //创建返回的Intent对象
                    data.putExtra("data", content);   //为intent对象设置值
                    setResult(2, data);               //设置回传结果
                    
                    finish();     //关闭窗口
                }
            });
    
        }
    }

    点击第一个按钮会打开第一个窗口。

    低级第二个按钮会打开第二个窗口,在第二个窗口中点击回传按钮,返回数据到第一个窗口,并关闭当前窗口。

  • 相关阅读:
    vs2017中信号与槽连接
    生成格雷码
    结构光三维测量技术
    格雷码生成算法
    结构光三维重建
    Qt之CMake和MinGW编译OpenCV
    qt+opencv编译环境的配置
    vs2017+opencv配置参考链接
    2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)
    2019-3-22c# TextBox只允许输入数字,禁用右键粘贴,允许Ctrl+v粘贴数字
  • 原文地址:https://www.cnblogs.com/zhengcheng/p/4363557.html
Copyright © 2020-2023  润新知