基础篇1.4 Activity和Intent
一、Activity组件和Intent
1、 Activity是用于与用户进行交互的一个组件。一般一个Android应用程序会由一个或者多个Activity组成。当然,会有一个main activity用于第一次启动应用程序的时候调用。
2、 Intent则相当于一个媒介的作用,用于Activity之间的调用和它们之间数据的传递。
二、应用举例:
例如开发一个简单的两个数之和的小应用。
1、 分析
需要创建两个Activity,第一个Activity用于用户操作界面,包含一个文本框、两个输入框和一个按钮;第二个Activity用于显示结果。
2、 开发过程
1) 在layout文件夹下修改main.xml文件,其对应MainActivity的布局,一般情况下,每一个activity对应一个布局的xml文件。
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
//第一个数
<EditText
android:id="@+id/myEditText01"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
/>
//显示符号“+”
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/add"/>
//第二个数
<EditText
android:id="@+id/myEditText02"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
/>
//按钮
<Button
android:id="@+id/myButton"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="@string/result"
/>
</LinearLayout>
2) 在MainActivity中显示出控件。
publicclass MainActivity extends Activity {
private EditText myEditText01, myEditText02;
private TextView myTextView;
private Button myButton;
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myEditText01 =(EditText) findViewById(R.id.myEditText01);
myEditText02 =(EditText) findViewById(R.id.myEditText02);
myTextView =(TextView) findViewById(R.id.myTextView);
myButton =(Button) findViewById(R.id.myButton);
//按钮的监听事件
myButton.setOnClickListener(newMyButtonListener());
}
//定义内部类监听
class MyButtonListener implementsOnClickListener {
@Override
public void onClick(View v) {
//获取两个控件的值,并将值存放到Intent中,用于传递给ResultActivity。
String add01 =myEditText01.getText().toString();
String add02 =myEditText02.getText().toString();
Intent intent = newIntent();
intent.putExtra("add01",add01);
intent.putExtra("add02",add02);
intent.setClass(MainActivity.this,ResultActivity.class);
MainActivity.this.startActivity(intent);
}
}
}
3) 定义显示结果的layout,result.xml
<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/result"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
4) ResultActivity中输出结果
publicclass ResultActivity extends Activity {
private TextView rs;
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
Intent intent = getIntent();
String add01 =intent.getStringExtra("add01");
String add02 =intent.getStringExtra("add02");
Double result =Double.parseDouble(add01) + Double.parseDouble(add02);
rs =(TextView)findViewById(R.id.result);
rs.setText(result.toString());
}
}
5) 最后需要注意的是,在AndroidManifest.xml中加入ResultActivity。
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.solidwang.activity_02"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="17"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
android:name="com.solidwang.activity_02.MainActivity"
android:label="@string/app_name">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name="com.solidwang.activity_02.ResultActivity">
</activity>
</application>
</manifest>
6) 启动程序