zoukankan      html  css  js  c++  java
  • android学习笔记(一)

    1.认识android的Activity组件

    Activity是什么

    1.什么是Activity:Activity(活动)就是一个用于和用户交互的组件。
    2.在实际的应用场景里面,比如一个拨打电话的界面就是一个Activity。
    3.Activity是可以嵌套启动的。比如,你在拨打电话的界面可以选择编辑短信的功能,当你点击编辑短信的时候,跳至编辑短信的界面(短信是另一个交互的界面,就是另一个Activity)。
    

    Activity绑定自定义视图

    在 MainActivity中,有一个onCreate()方法(这里先不说明它的作用),其中有一个语句:
    
    //设置内容视图
     setContentView(R.layout.activity_main);
    它的作用就是绑定一个视图界面。通过它你可以绑定自己想要的布局,而不一定是默认的布局页面。
    

    启动一个Activity

    在主活动中:
    
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    //        获取activity_xml(和这个activity关联的视图界面)的button
    //        通过findViewById的方式在R文件中寻找
            Button button = (Button) findViewById(R.id.startActivity);
    
    //        设置按钮监听事件
            button.setOnClickListener(new View.OnClickListener(){
    
                @Override
                public void onClick(View view) {
    //                Intent负责activity的参数传递,现在暂时可以理解为通过Intent建立两个activity之间的跳转
                    Intent intent = new Intent(MainActivity.this,Main2Activity.class);
    //                startActivity启动
                    startActivity(intent);
                }
            });
    
        }

    2.Activity的生命周期

    这里写图片描述

    • onCreate():第一次创建的时候被调用。
    • onStart():显示给前台调用。
    • onResume():与用户进行交互的时候调用。
    • onPause():暂停一个activity的时候调用。
    • onStop():对用户不可见的时候调用。
    • onRestart():重新显示的时候调用。
    • onDestory():销毁activity的时候调用。

    3.Activity之间传递参数

    简单的数据传递

    步骤:在主活动中,使用putExtra()方法输入要传递的数据,在第二个活动中用getStringExtra()方法接收(注意:这里的getStringExtra()是因为传递的是字符串,如果是其他类型,那么可以是其他的类似的接收方法)。
    
     button.setOnClickListener(new View.OnClickListener(){
    
                @Override
                public void onClick(View view) {
    //                Intent负责activity的参数传递,现在暂时可以理解为通过Intent建立两个activity之间的跳转
                    Intent intent = new Intent(MainActivity.this,Main2Activity.class);
    //其中第一个参数是传递的数据集合的名字,第二个是传递的内容
                    intent.putExtra("data","这是被传递的数据");
                    //                startActivity启动
                    startActivity(intent);
                }
            });
    //        获取textview
            TextView textView = (TextView) findViewById(R.id.textView);
    
    //        通过getIntent()来获取传递的值
            Intent intent = getIntent();
            String content = intent.getStringExtra("data");
    //          设置让传递的数据显示在TextView里面
            textView.setText(content);

    传递数据包Bundle

    MainActivity.java

     Intent负责activity的参数传递,现在暂时可以理解为通过Intent建立两个activity之间的跳转
                    Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                    Bundle bundle = new Bundle();
                    bundle.putInt("age",1);
                    bundle.putString("name","leo");
    //               注意这里用的是putExtras()
                    intent.putExtras(bundle);
    //                startActivity启动
                    startActivity(intent);

    Main2Activity.java

    //        获取textview
            TextView textView = (TextView) findViewById(R.id.textView);
            Intent intent = getIntent();
    //        通过Bundle获取
            Bundle data = intent.getExtras();
    //          设置让传递的数据显示在TextView里面
    //        注意最后的data.getString()方法,还可以设置本来没有的数据,其中的“man”对应的参数是默认值
            textView.setText(String.format("name=%s,age=%d",data.getString("name"),data.getInt("age"),data.getString("sex","man")));
    除了上面的Bundle使用,还可以在主活动中用getExtra("名字",Bundle)来传递(上面用的是getExtras()),在接收的部分用getBundleExtra("名字").
    

    MainActivity.java

     Intent负责activity的参数传递,现在暂时可以理解为通过Intent建立两个activity之间的跳转
                    Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                    Bundle bundle = new Bundle();
                    bundle.putInt("age",1);
                    bundle.putString("name","leo");
    //               注意这里用的是putExtra()
                    intent.putExtra("data",bundle);
    //                startActivity启动
                    startActivity(intent);

    Main2Activity.java

     获取textview
            TextView textView = (TextView) findViewById(R.id.textView);
            Intent intent = getIntent();
    //        通过Bundle获取
            Bundle data = intent.getBundleExtra("data");
    //          设置让传递的数据显示在TextView里面
    //        注意最后的data.getString()方法,还可以设置本来没有的数据,其中的“man”对应的参数是默认值
            textView.setText(String.format("name=%s,age=%d,sex=%s",data.getString("name"),data.getInt("age"),data.getString("sex","man")));

    和intent传值相比,Bundle传递数据更加简洁。具体的使用需要结合实际的场景来理解。

    传递值对象

    值对象:自定义,有数据结构的对象

    1.采用Serializable的方式(序列化的方式)
    创建一个自定义的对象:

    //这里使用序列化的方式
    public class user implements Serializable {
        String name ;
        int age;
    
    
    
    //使用get和set方法
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    //一个构造函数
        public  user(String name , int age){
            this.name = name;
            this.age = age;
        }
    }

    MainActivity.java

    Intent负责activity的参数传递,现在暂时可以理解为通过Intent建立两个activity之间的跳转
                    Intent intent = new Intent(MainActivity.this,Main2Activity.class);
    
                    intent.putExtra("User", (Serializable) new user("张三",15));
    //                startActivity启动
                    startActivity(intent);

    Main2Activity.java

     TextView textView = (TextView) findViewById(R.id.textView);
            Intent intent = getIntent();
            user u = (user) intent.getSerializableExtra("User");
    
            textView.setText(String.format("User Info(name = %s,age = %d)",u.getName(),u.getAge()));

    传递数据

    1.startActivityForResult()

    startActivityForResult()方法相比于startActivity()就是可以接收返回的一个参数(数据)。两者都是启动Activity的方法。

  • 相关阅读:
    最小生成树+BFS J
    Noip 2016
    舒适的路线 (code[vs] 1001)
    拦截导弹 (加了神奇的位运算)
    逃出克隆岛 (codevs 2059)
    回家(洛谷 P1592)
    热浪
    城堡
    笔记 (一道正解思路巧妙的题)
    脱水缩合
  • 原文地址:https://www.cnblogs.com/comefuture/p/8305940.html
Copyright © 2011-2022 走看看