知识库

wiki.linsakura.com

用户工具

站点工具


wiki:book:notes:android:第一行代码-android-第2版-郭霖:第2章

这是本文档旧的修订版!


第2章 先从看得到的入手——探究活动

活动Activity

主要用于和用户进行交互。

启动的主活动

<activity>标签的内部加入<intent-filter>标签,添加下面两句声明即可:

<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

通知消息Toast

用途:将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间。

Button button1 = (Button) findViewByid(R.id.button_1);
button1.setOnClicklistener(new View.OnClicklistener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(FirstActivity.this, "你点击了Button1", Toast.LENGTH_SHORT).show();
    }
});

可以通过findViewById()获取布局文件中定义的元素。
setOnClicklistener()方法为按钮注册一个监听器,点击按钮时就会执行监听器中的onClick()方法。

活动中使用Menu

getMenuinflater()方法能够得到Menuinflater对象,再调用它的inflate()方法就可以给当前活动创建菜单。

销毁一个活动

finish()

Intent交互

Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据
Intent一般可被用于启动活动启动服务发送广播等场景。
Intent分两种:显示Intent、隐式Intent。

使用隐式Intent

intent.addCategory("com.exampte.activitytest.MY_CATEGORY");
<activity android:name=".SecondActivity" >
    <intent-filter>
        <action android:name="com.example.activitytest.ACTION_START" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="com.exampte.activitytest.MY_CATEGORY"/>
    </intent-filter>
</activity>

更多隐式Intent用法

不仅可以启动自己程序内的活动,还可以启动其他程序的活动。

//调用系统浏览器打开网页
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
//调用系统拨号界面
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:18886"));

向下一个活动传递数据

使用putExtra()存放数据到intent:

String data = "Hello SecondActivity";
Intent intent = new Intent{FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);

使用getStringExtra()获取数据:

Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");

返回数据给上一个活动

FirstActivity按钮onClick()中添加:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityforResult(intent, 1);

startActivityForResult()方法接收两个参数,第一个参数还是Intent, 第二个参数是请求码,用于在之后的回调中判断数据的来源
SecondActivity按钮onClick()中添加:

Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);

调用了setResult()方法。这个方法非常重要,是专门用于向上一个活动返回数据的。
SecondActivity销毁后,在FirstActivity中判断:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case 1:
        if (resultCode == RESULT_OK) {
        String returnedData = data.getStringExtra("data_return");
        Log.d("FirstActivity", returnedData);
        break;
    default:
    }
}

如果使用Back键回到FirstActivity,则重写SecondActivity中的onBackPressed()方法即可。

活动的生存期

  1. onCreate(): 第一次被创建,初始化操作
  2. onStart(): 不可见变为可见
  3. onResume(): 在活动准备号和用户进行交互的时候调用
  4. onPanse(): 启动或恢复另一个活动时
  5. onStop(): 活动完全不可见时,和onPansu()区别:如果启动的新活动是一个对话框式的活动,onPanse()会执行,onStop()不会执行
  6. onDestroy(): 被销毁之前
  7. onRestart(): 停止状态变为运行状态前调用

活动被回收时数据的保存

onSaveinstanceState()回调方法,这个方法可以保证在活动被回收之前一定会被调。

//在MainActivity中添加以下代码,可以将临时数据进行保存:
@Override
protected void onSaveinstanceState(Bundle outstate) {
super.onSaveinstanceState(outState);
}
wiki/book/notes/android/第一行代码-android-第2版-郭霖/第2章.1649223780.txt.gz · 最后更改: 2022/04/06 13:43 由 博丽幻月