一、按钮控件的使用
在布局文件(layout目录下first_layout.xml)中添加Button标签,设置id、宽高等属性;
在活动(FirstActivity.java)中加载布局文件
1
setContentView(R.layout.first_layout)
通过id找到该按钮,并重写点击事件
1 | Button button1 = (Button) findViewById(R.id.button_1); |
注意:Toast.makeText函数的第一个参数为Context类型,由于在new View.OnClickListener中重写onClick事件,this表示View.OnClickListener对象,需要在FirstActivity中显示文本,因此需要写成FirstActivity.this
二、Menu的使用
创建menu的布局文件(res目录下新建menu文件夹,在menu文件夹下右击新建Menu resource file),生成main.xml
添加菜单项(在main.xml文件中添加<item></item>标签,指定每个item的id)
重写onCreateOptionsMenu方法
1
2
3
4public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return super.onCreateOptionsMenu(menu);
}重写菜单响应事件
1
2
3
4
5
6
7
8
9
10
11public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.add_item:
Toast.makeText(this,"clicked add", Toast.LENGTH_SHORT).show();
case R.id.remove_item:
Toast.makeText(this,"clicked Remove", Toast.LENGTH_SHORT).show();
break;
default:
}
return super.onOptionsItemSelected(item);
}
三、显式Intent跳转活动
在FirstActivity中点击按钮跳转到SecondActivity。
1 | button1.setOnClickListener(new View.OnClickListener() { |
四、隐式Intent跳转活动
在FirstActivity中点击按钮跳转到SecondActivity。
在<activity>标签下配置<intent-filter>,指定当前活动能够响应的action和category
1
2
3
4
5
6
7
8
9
10<activity
android:name=".SecondActivity"
android:exported="true"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="com.example.chapter2_activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>
</activity>在<intent-filter>中配置<data>标签,能够更精确地指定当前活动响应什么类型的数据。
修改FirstActitvity点击事件
1
2
3
4
5
6
7
8button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent intent = new Intent("com.example.chapter2_activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
}
});
五、隐式Intent打开某网站
1 | button1.setOnClickListener(new View.OnClickListener() { |
六、Intent传递数据
FirstActivity传递字符串给SecondActivity。
在FirstActivity.java中设置传输Intent
1
2
3
4String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);在SecondActivity.java中取出数据
1
2
3Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity", data);
七、返回数据给上一个活动
在FirstActivity.java中用startActivityForResult用于启动SecondActivity
1
2Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent,1);在SecondAvtivity.java中用setResult向上一个活动返回数据
1
2
3
4Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();用startActivityForResult方法启动SecondActivity,在SecondActivity被销毁后会回调上一个活动的onActivityResult方法,因此要在FirstActivity.java中重写该方法得到返回数据
1
2
3
4
5
6
7
8
9
10
11
12protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnedData);
}
break;
default:
}
}
八、活动状态
运行状态:活动位于返回栈的栈顶
暂停状态:活动不再处于栈顶位置,但仍然可见,如对话框形式的活动
停止状态:活动不再处于栈顶位置,并且完全不可见
销毁状态:活动从返回栈移除
onCreate():活动第一次被创建时调用,在该方法中完成活动的初始化操作,如加载布局、绑定事件等
onStart():活动由不可见变为可见时调用
onResume():活动准备好和用户进行交互时调用
onPause():系统准备去启动或者恢复另一个活动时调用
onStop():活动完全不可见时调用
onDestroy():活动被销毁之前调用
onRestart():活动由停止状态变为运行状态之前调用
九、活动的启动模式
standard模式


singleTop模式
在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不再创建新的活动实例;当活动未处于栈顶位置时,若再次启动该活动还是会创建新的实例。


singleTask模式
每次启动该活动时,系统首先会在返回栈中检查是否存在该活动的实例,若发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,若没有发现就创建一个新的活动实例。


singleInstance模式
有一个单独的返回栈来管理某个活动,不管哪个应用程序来访问该活动都共用同一个返回栈,这样解决了共享活动实例的问题。

