03 |「开发必备知识点」

前言

基础知识点汇总

一、Activity

1. 是什么

  • 打开一个 APP 后所看到的各个界面,每个界面都是一个 Activity。

2. 作用

  • APP 通过 Activity 来展示各个界面,处理和用户的交互;比如文本框输入内容、点击按钮触发事件、观看视频等。

3. 使用

  • 1)新建 Activity

    • Activity Name:类名称,命名为 功能 + Activity;例如:TestActivity
    • Layout Name:输入类名称后,会自动跟随输入的类名改变,Android Studio 建议的布局文件的名称和 Activity 的名称保持一致;方便直接在 res 目录下查看每个Activity对应的 layout 布局文件;
  • 2)Java 目录下源程序

    • onCreate():程序从此处开始执行;
    • setContentView():指定一个视图用来呈现内容;
  • 3)启动另一个视图

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.my_layout);  // 指定一个视图
    	}
    }
    
  • 3)通过按钮绑定触发切换下一个 Activity

在布局文件(XML)里 id 设置好名字,在源程序中就可以直接访问到名字变量

新建一个 Activity,会自动在 Java 目录下自动创建一个 class (类文件)同时创建好一个 XML (布局文件),有对应关系;

// MainActivity
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);  // 指定一个视图

        // 根据 id 找到所创建的按钮,绑定点击事件
        findViewById(R.id.btnStartAnotherAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 启动一个Activity,startActivity(传入一个Intent实例) 通过Intent实例来配置要启动的目标Activity
                startActivity(new Intent(MainActivity.this, AnotherAty.class));
            }
        });
    }
}

// AnotherAty
public class AnotherAty extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_another_aty);
    }
}

二、Activity 生命

1、生命周期图

帮助文档

Activity启动 --> 执行 onCreate() --> onStart() --> onResume() -->(前面三个函数是在创建 Activity 过程中执行) Activity 运行 --> onPause() (暂停 Activity,可见 ) --> onStop(停止,Activity 处于不可见状态) --> 通过导航重新回到 Activity --> onRestart() --> onStart() --> onResume()

回到桌面
退出界面
切换回到界面

2、两个 Activity 跳转过程中生命周期

三、Activity 间传递数据

1、传递数据

1)传递简单数据
// MainActivity
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);  // 指定一个视图

        // 根据 id 找到所创建的按钮
        findViewById(R.id.btnStartAnotherAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // AnotherAty是通过Intent启动的
                Intent i = new Intent(MainActivity.this, AnotherAty.class);  // AnotherAty.class:要被启动Activity类的定义
                // 传递参数
                i.putExtra("data", "Hello Yjx!!!");
                startActivity(i);
            }
        });
    }
}
public class AnotherAty extends AppCompatActivity {

    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_another_aty);

        // AnotherAty是通过Intent启动的
        // 获取MainActivity传来的数据,通过getIntent获取到与该Activity相关的Intent
        Intent i = getIntent();
        tv = findViewById(R.id.tv);
        tv.setText(i.getStringExtra("data"));
    }
}
2)传递数据包(Bundle)
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);  // 指定一个视图

        // 根据 id 找到所创建的按钮
        findViewById(R.id.btnStartAnotherAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // AnotherAty是通过Intent启动的
                Intent i = new Intent(MainActivity.this, AnotherAty.class);  // AnotherAty.class:要被启动Activity类的定义
                Bundle b = new Bundle();  // 数据资源包:可以存入多种基本数据
                b.putString("name", "Yjx");
                b.putInt("age", 2);
                i.putExtras(b);
                startActivity(i);
            }
        });
    }
}
public class AnotherAty extends AppCompatActivity {

    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_another_aty);

        // AnotherAty是通过Intent启动的
        // 获取MainActivity传来的数据,通过getIntent获取到与该Activity相关的Intent
        Intent i = getIntent();
        // 先获取Bundle
        Bundle data = i.getExtras();

        tv = findViewById(R.id.tv);
        tv.setText(String.format("name=%s, age=%d", data.getString("name"), data.getInt("age")));
    }
}
3)传递值对象
// User类
public class User implements Serializable {
    private String name;
    private  int age;

    public User(String name, int age)
    {
        this.name = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
// MainActivity
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);  // 指定一个视图

        // 根据 id 找到所创建的按钮
        findViewById(R.id.btnStartAnotherAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // AnotherAty是通过Intent启动的
                Intent i = new Intent(MainActivity.this, AnotherAty.class);
                // 传数据
                i.putExtra("user", new User("Yjx", 26));
            }
        });
    }
}
// anotherAty
public class AnotherAty extends AppCompatActivity {

    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_another_aty);

        // AnotherAty是通过Intent启动的
        // 获取MainActivity传来的数据,通过getIntent获取到与该Activity相关的Intent
        Intent i = getIntent();
        // 获取对象
        User user = (User) i.getSerializableExtra("user");

        tv = (TextView) findViewById(R.id.tv);
        tv.setText(String.format("User info(name = %s, age = %d)", user.getName(), user.getAge()));
    }
}

2、获取传回的数据

// MainActivity
public class MainActivity extends AppCompatActivity {
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);  // 指定一个视图

        tv = findViewById(R.id.textView);

        // 根据 id 找到所创建的按钮
        findViewById(R.id.btnStartAnotherAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // AnotherAty是通过Intent启动的
                Intent i = new Intent(MainActivity.this, AnotherAty.class);
                // 传数据给AnotherAty
                i.putExtra("user", new User("Yjx", 26));
                // 接受AnotherAty传回来的数据
                startActivityForResult(i, 0);  // 0:根据请求的代码确定此次请求的意义

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);  // requestCode:请求的意义,resultCode:结果数据的状态,data:传回来数据
        tv.setText("另一个Activity返回的数据是: "+data.getStringExtra("data"));
    }
}
// AnotherAty
public class AnotherAty extends AppCompatActivity {

    private TextView tv;
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_another_aty);
        tv = findViewById(R.id.tv);
        editText = findViewById(R.id.editText);

        // AnotherAty是通过Intent启动的
        // 获取MainActivity传来的数据,通过getIntent获取到与该Activity相关的Intent
        Intent i = getIntent();
        // 获取对象
        User user = (User) i.getSerializableExtra("user");

        tv.setText(String.format("User info(name = %s, age = %d)", user.getName(), user.getAge()));

        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 设置返回数据
                Intent i = new Intent();  // Intent作用:1)启动一个Activity  2)作为一个数据的载体来传
                i.putExtra("data",editText.getText().toString());
                setResult(1, i);  // 设置返回值:传回给mainActivity的值,1:返回的状态码,1代表成功,其余代表失败,i:返回的数据
                finish();  // 返回完数据之后,结束掉当前Activity
            }
        });
    }
}

四、Intent

1、显示 Intent

  • 创建 Intent 并指定被启动的 Activity 的定义;
public class MainActivity extends AppCompatActivity {
    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);  // 指定一个视图
        findViewById(R.id.btnAnotherAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this, MyAty.class));  // 显示Intent,直接指明了被启动的类的定义
            }
        });
    }
}

2、隐式 Intent

  • 创建 Intent 不指定被启动的 Activity 的定义;

五、Context

  • 用来访问全局信息(应用程序的资源,图片资源、字符串资源 …)的接口,一些常用的组件会继承自 Context

  • 访问全局的信息,必须通过 Context

    public class MainActivity extends AppCompatActivity {
        private TextView tv;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            tv = new TextView(this);  // this:MainActivity的实例,将this传给context,在内部对context有一个引用
            tv.setText(R.string.hello_world);
            setContentView(tv);  // 指定一个视图
            }
    }
    

六、Application

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个写代码的修车工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值