droid:id="@+id/answer_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="24dp"
tools:text="Answer"/>
<Button
android:id="@+id/show_answer_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/show_answer_button"/>
</LinearLayout>
activity_cheat.xml 效果图
- 注意用于显示答案的TextView组件,它的tools和tools:text属性的命名空间比较特别。该命名空间可以覆盖某个组件的任何属性。这样,可在预览中看到效果,而在运行时Answer文字不会显现出来。
- 应用的所有activity都必须在manifest配置文件中声明,这样操作系统才能找到它们。
//在manifest配置文件中声明CheatActivity
<activity android:name=".CheatActivity">
</activity>
启动activity
public void startActivity(Intent intent)
activity调用startActivity(Intent)方法时,调用请求实际发给了操作系统的ActivityManager。ActivityManager负责创建Activity实例并调用其onCreate(Bundle)方法
public Intent(Context pageContext,Class<?> cls)
传入该方法的Class类型参数告诉ActivityManager应该启动哪个activity
Context参数告诉ActivityManager在哪里可以找到它
mCheatButton=(Button)findViewById(R.id.cheat_button);
mCheatButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//从QuizActivity启动CheatActivity
Intent i=new Intent(QuizActivity.this,CheatActivity.class);
startActivity(i);
}
});
activity间数据传递
将extra数据信息添加给intent,调用Intent.putExtra(...)方法
public Intent putExtra(String name,boolean value)
Intent i=new Intent(QuizActivity.this,CheatActivity.class);
i.putExtra(EXTRA_ANSWER_IS_TRUE,answerIsTrue);
startActivity(i)
从extra获取数据
public boolean getBooleanExtra(String name,boolean defaultValue)
mAnswerIsTrue=getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE,false);
Activity.getIntent()方法返回了由startActivity(Intent)方法转发的Intent对象
//父activity
/*第二个参数是请求码,*/
public void startActivityForResult(Intent intent,int requestCode)
//子activity发送返回信息给父activity,有2种方法
public final void setResult(int resultCode)
public final void setResult(int resultCode,Intent data)
resultCode可以是以下任意一个预定义常量
- Activity.RESULT_OK ,即1
- Activity.RESULT_CANCELED ,即0
如需自定义结果代码,还可使用另一个常量:RESULT_FIRST_USER
//父,QuizActivity
private static final int REQUEST_CODE_CHEAT=0;
mCheatButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean answerIsTrue=mQuestionBank[mCurrentIndex].isAnswerTrue();
Intent i=new Intent(QuizActivity.this,CheatActivity.class);
i.putExtra(EXTRA_ANSWER_IS_TRUE,answerIsTrue);
startActivityForResult(i,REQUEST_CODE_CHEAT);
}
});
//处理返回结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//super.onActivityResult(requestCode, resultCode, data);
//结果码不一致
if (resultCode!= Activity.RESULT_OK){
return;
}
//结果码一致
if (requestCode==REQUEST_CODE_CHEAT){
if (data==null){
return;
}
//解析结果intent
mIsCheater=data.getBooleanExtra(EXTRA_ANSWER_SHOW,false);
}
}
//子,CheatActivity
Intent data=new Intent();
data.putExtra(EXTRA_ANSWER_SHOW,isAnswerShown);
setResult(RESULT_OK,data);//设置返回结果
10. activity的使用与管理
被指定为应用的第一个activity
<!--指定第一个acti