实验2:Android组件和组件通信
1.1 实验目的
了解使用Intent进行组件通信的原理,掌握使用Intent启动Activity的方法;
掌握获取Activity返回值的方法;了解Intent过滤器的原理与匹配机制;
1.2 实验工具
Eclipse(MyEclipse)+ ADT22 + Android2.2 SDK(Android4.0.3);
1.3 实验题目
1.编程实现
⑴功能描述:
主界面上有一个“登录”按钮,点击“登录”按钮后打开一个新的Activity;新的Activity上面有输入用户名和密码的控件,在用户关闭这个Activity后,将用户输入的用户名和密码传递到主界面中。
⑵编程要点:
①主界面的Activity命名为MainActivity;启动新的Activity命名为UserLoginActivity; /*父传子*/
②分别使用显示启动和隐式启动的方式,启动新的Activity;
③用户名中不能出现“@”符号,同时长度不超过12个字符;只能为数字; ④返回的用户名和密码加入到bundle对象中,要以Toast的方式显示出来;
⑤MainActivity和UserLoginActivity中各个生命周期的回调函数中要以Log.i方式显示日志信息。// 看课件
2.编程实现 ⑴功能描述:
编程建立一个碎片应用。应用程序中有一个MainActivity,它包含两个
Fragment,分别为
LeftFragment和RightFragment。应用要求显示一个主从式的界面,其中,LeftFragment中包含2个Button,RightFragment包含一个TextView,点击左边
按钮,右边显示相应详细内容。
⑵编程要点:
1.4实验步骤 实验1
编程要点1
MainActivity.javaUserLoginActivity.java
编程要点2 显示启动
button1.setOnClickListener(newView.OnClickListener() {
publicvoidonClick(View v) {
Intent intent =
Toast.makeText(getApplicationContext(), \显示启动\,
newIntent(MainActivity.this,UserLoginActivity.class); Toast.LENGTH_SHORT).show();
startActivityForResult(intent, request_Code); }});
隐式启动
button2.setOnClickListener(newView.OnClickListener(){
publicvoidonClick(View v) {
Intent intent = newIntent(\); Toast.makeText(getApplicationContext(), \隐式启动\,
Toast.LENGTH_SHORT).show();
startActivityForResult(intent, request_Code);
}});
编程要点3
在EditText中添加两个属性
android:numeric=\
android:maxLength=\
编程要点4
用户名和密码加入到bundle对象中
publicvoidonClick(View view) { }
Intent i = new
Intent(\);
EditTexttxt_username =
(EditText) findViewById(R.id.txt_username); (EditText) findViewById(R.id.txt_usersecret); Bundle extras = newBundle();
extras.putString(\, txt_username.getText().toString());
extras.putString(\, txt_usersecret.getText().toString()); i.putExtras(extras); setResult(RESULT_OK,i); finish();
EditTexttxt_usersecret =
Toast的方式显示出来
publicvoidonActivityResult(intrequestCode, intresultCode, Intent data) {
switch (resultCode) { caseRESULT_OK: {
Bundle b=data.getExtras();
Toast.makeText(this, b.getString(\),
Toast.LENGTH_SHORT).show(); Toast.LENGTH_SHORT).show();
Toast.makeText(this,b.getString(\),
} break;
default:break; }
}
编程要点5
MainActivity和UserLoginActivity中各个生命周期的回调函数中要以Log.i方式显示日志信息。 以MainActivity为例
public class MainActivity extends Activity { intrequest_Code = 1;
Button button1,button2;
private static String TAG =\ @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.i(TAG, \
button1 = (Button) this.findViewById(R.id.button1); button2 = (Button) this.findViewById(R.id.button2); button1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainActivity.this,UserLoginActivity.class); Toast.makeText(getApplicationContext(), \显示启动\Toast.LENGTH_SHORT).show(); startActivityForResult(intent, request_Code); }}); button2.setOnClickListener(new View.OnClickListener(){ public void onClick(View v) { Intent intent = new Intent(\ Toast.makeText(getApplicationContext(), \隐式启动\Toast.LENGTH_SHORT).show(); startActivityForResult(intent, request_Code); }}); }
public void onActivityResult(intrequestCode, intresultCode, Intent data) { switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK case RESULT_OK: { Bundle b=data.getExtras(); //data为B中回传的Intent //String str=b.getString(\即为回传的值 Toast.makeText(this, b.getString(\ Toast.LENGTH_SHORT).show(); //---get the data using the getInt() method--- Toast.makeText(this,b.getString(\ Toast.LENGTH_SHORT).show(); } break;
default: break; } }
@Override //可视生命周期开始时被调用,对用户界面进行必要的更改 public void onStart() { super.onStart();
Log.i(TAG, \ }
@Override //在onStart()后被调用,用于恢复onSaveInstanceState()保存的用户界面信息
public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.i(TAG, \ }
@Override //在活动生命周期开始时被调用,恢复被onPause()停止的用于界面更新的资源
public void onResume() { super.onResume();
Log.i(TAG, \ }
@Override // 在onResume()后被调用,保存界面信息 public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); Log.i(TAG, \ }
@Override //在重新进入可视生命周期前被调用,载入界面所需要的更改信息
public void onRestart() { super.onRestart();
Log.i(TAG, \ }
@Override //在活动生命周期结束时被调用,用来保存持久的数据或释放占用的资源。
public void onPause() { super.onPause();
Log.i(TAG, \ }
@Override //在可视生命周期结束时被调用,一般用来保存持久的数据或释放占用的资源
public void onStop() { super.onStop();
Log.i(TAG, \