26
2017
09

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的方法。

上一篇:2017年腾讯移动客户端面试总结-失败经验 下一篇:基于ViewDragHelper实现侧滑