Android:Activity & Intent
2.2 Activity的基本用法
- 隐藏标题栏
- 在AndroidManifest.xml中配置,作为全局配置,在所有Activity范围内生效
- android:theme="@android:style/Theme.NoTitleBar"
- 在代码中配置,必须在setContentView()前调用该方法,只在当前Activity生效
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- 在style.xml中设置
- 在AndroidManifest.xml中配置,作为全局配置,在所有Activity范围内生效
2.3 Intent的应用场景
- Activity
- Service
- BroadcastReceiver
2.3.1 显式Intent
- Intent intent = new Intent(CurrentActivity.this, NextActivity.class);
- startActivity(intent);
- 明确指定了下一个Activity
2.3.2 隐式Intent
代码中创建Intent对象时并不明确指向具体的Activity。设定该Intent对象的action/category/data,在startActivity(intent)时,系统会调用在AndroidManifest.xml中注册的Activity,<intent-filter>里指定的action/category/data,必须与代码的设定完全一致。
- action
- Intent intent = new Intent(Intent.ACTION_VIEW);
- 此处的ACTION_VIEW即为action。每个Intent对象只有一个action,可自定义
- Intent.ACTION_VIEW响应打开浏览器的动作
- Intent.ACTION_DIAL响应调用“拨号”动作
- category
- intent.addCategory(“MY_CATEGORY”);
- 通过addCategory()来添加category,每个Intent对象可设置多个category,可自定义
- data
- 更精确地指定该Activity能响应的Intent类型,可设置多个data
- android:scheme
- android:host
- android:mimeType
- etc.
2.3.4 Activity之间传递数据(设Activity A向B传递数据)
- 通过Intent传递,形式为key-value,如HashMap对象
- intent.putExtra(“my_key", value);
- A中将startActivity()更换为startActivityForResult(),并传入requestCode作为A接收到其他Activity返回的数据时的标识(flag)
- startActivityForResult(intent, requestCode);
- B中通过取得A传递过来的Intent对象取得数据
- Intent intent = getIntent();
- String data = intent.getStringExtra(“my_key");
- 如果B要返回数据给A,需要添加returnCode
- Intent intent = new Intent();
- intent.putExtra(key, value);
- setResult(RESULT_OK, intent);
- finish();
- A在onActivityResult()对B回传的数据进行处理
- 根据requestCode使用switch语句进行处理
- 可以根据resultCode进行判断(RESULT_OK/RESULT_CANCEL)
- B在点击返回键时传递数据
- 覆写onBackPressed();
- super.onBackPressed();一定要注释掉或置于最后,否则会在这一步直接返回