1.Activity
1:一个Activity必须继承Activity类,同时重写onCreate方法,进行Activity的初始化操作。
2:要在AndroidManifest.xml中声明对应activity节点,在加载AndroidManifest.xml是调用对应Activity的onCreate方法。
3:AndroidManifest.xml中应该只有一个activity节点有intent-filter节点(intent-filter中的属性之固定),保证了应用在手机中只有一个入口。AndroidManifest.xml中有几个activity有intent-filter节点,并且属性值如下,就会在桌面产生几个图标。
4:在application和activity中还可以声明icon、label属性。icon制定桌面的图标,label制定桌面应用的名称。如果activity中没有icon、label属性则使用application的icon、label属性值。
<application
android:allowBackup="true"
android:icon="@drawable/head1" //图标
android:label="hello" //应用名称
android:theme="@style/AppTheme" >
< activity
android: name= " com.my.android17.MainActivity"
android: label= " @string/app_name" >
< intent-filter>
< action android: name= " android.intent.action.MAIN" />
< category android: name= " android.intent.category.LAUNCHER" />
</ intent-filter>
</ activity>
</ application>
2.打电话的页面跳转
public void call ( View v) {
Intent intent = new Intent ( ) ;
intent. setAction ( Intent. ACTION_CALL) ;
intent. setData ( Uri. parse ( "tel:" + 110 ) ) ;
startActivity ( intent) ;
}
1:Intent是一个过滤器,会对封装的信息进行过滤。
2:打电话的Intent,通过设置的动作和数据的约束,会匹配到下面这个Intent。
<intent-filter>
<action android:name="android.intent.action.CALL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
3.隐式意图
1:通过匹配Activity的意图过滤器来打开另一个画面,需要意图过滤器中的内容都被匹配。
2:如果一个Activity需要通过意图过滤器进行匹配,则必须添加intent-filter节点。
public class MainActivity extends Activity {
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_main) ;
}
public void openOne ( View v) {
Intent intent = new Intent ( ) ;
intent. setAction ( "com.my.second" ) ;
intent. setData ( Uri. parse ( "my:" + 1111 ) ) ;
startActivity ( intent) ;
}
public void openSecond ( View v) {
Intent intent = new Intent ( ) ;
intent. setAction ( "com.my.second" ) ;
intent. setDataAndType ( Uri. parse ( "my:" ) , "my/m" ) ;
startActivity ( intent) ;
}
}
< activity
android: name= " com.my.androidpro18.SecondActivity" >
< intent-filter>
< action android: name= " com.my.second" />
< category android: name= " android.intent.category.DEFAULT" />
< data android: scheme= " my" />
</ intent-filter>
< intent-filter>
< action android: name= " com.my.second" />
< category android: name= " android.intent.category.DEFAULT" />
< data android: scheme= " my" android: mimeType= " my/m" />
</ intent-filter>
</ activity>
4.显示意图
1:打开自己应用的Activity可以使用显示意图。
2:打开别人的Activity或者需要别人打开自己的Activity可以使用隐式意图。
3:通过显示意图打开自己的Activity,也需要将这个Activity加入到AndroidManifest.xml,不然会有错误have you declared this activity in your androidManifest.xml。
public class MainActivity extends Activity {
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_main) ;
}
public void openThird ( View v) {
Intent intent = new Intent ( ) ;
intent. setClassName ( "com.my.androidpro18" , "com.my.androidpro18.MainActivity" ) ;
startActivity ( intent) ;
}
}
5.页面数据传递小案列-1
public class MainActivity extends Activity implements OnClickListener {
private EditText et_name;
private RadioGroup rg_gender;
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_main) ;
et_name = ( EditText) findViewById ( R. id. et_name) ;
rg_gender = ( RadioGroup) findViewById ( R. id. rg_gender) ;
Button btn_cale = ( Button) findViewById ( R. id. btn_cale) ;
btn_cale. setOnClickListener ( this ) ;
}
@Override
public void onClick ( View v) {
String name = et_name. getText ( ) . toString ( ) ;
int buttonId = rg_gender. getCheckedRadioButtonId ( ) ;
boolean gender = true ;
if ( buttonId == R. id. rb_female) {
gender = false ;
}
System. out. println ( gender) ;
Intent intent = new Intent ( getApplicationContext ( ) , ResultActivity. class ) ;
intent. putExtra ( "name" , name) ;
intent. putExtra ( "gender" , gender) ;
startActivity ( intent) ;
}
}
public class ResultActivity extends Activity {
private TextView tv_result;
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_show) ;
Intent intent = getIntent ( ) ;
String name = intent. getStringExtra ( "name" ) ;
boolean gender = intent. getBooleanExtra ( "gender" , true ) ;
TextView et_info = ( TextView) findViewById ( R. id. et_info) ;
et_info. setText ( "姓名:" + name + ",性别:" + ( gender? "男" : "女" ) ) ;
tv_result = ( TextView) findViewById ( R. id. tv_result) ;
caleRP ( ) ;
}
public void caleRP ( ) {
Random ran = new Random ( ) ;
int result = ran. nextInt ( 100 ) ;
if ( result> 80 ) {
tv_result. setText ( "5" ) ;
} else if ( result> 60 ) {
tv_result. setText ( "4" ) ;
} else if ( result> 40 ) {
tv_result. setText ( "3" ) ;
} else {
tv_result. setText ( "2" ) ;
}
}
}
6.页面数据传递小案列-2
public class MainActivity extends Activity {
String[ ] smss = new String [ ] {
"1" ,
"2" ,
"3" ,
"4" ,
"5" ,
"6"
} ;
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_main) ;
ListView item = ( ListView) findViewById ( R. id. lv_item) ;
ArrayAdapter< String> adapter = new ArrayAdapter < String> ( getApplicationContext ( ) , R. layout. item, smss) ;
item. setAdapter ( adapter) ;
item. setOnItemClickListener ( new OnItemClickListener ( ) {
@Override
public void onItemClick ( AdapterView< ? > parent, View view,
int position, long id) {
String sms = smss[ position] ;
Intent intent = new Intent ( ) ;
intent. setAction ( "android.intent.action.SEND" ) ;
intent. setType ( "text/plain" ) ;
intent. putExtra ( "sms_body" , sms) ;
startActivity ( intent) ;
}
} ) ;
}
}
7.页面数据传递小案列-3
public class MainActivity extends Activity implements OnClickListener {
private EditText et_number;
private EditText et_content;
private Button btn_contact;
private Button btn_reply;
private Button btn_send;
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_main) ;
et_number = ( EditText) findViewById ( R. id. et_number) ;
et_content = ( EditText) findViewById ( R. id. et_smsContent) ;
btn_contact = ( Button) findViewById ( R. id. btn_contact) ;
btn_reply = ( Button) findViewById ( R. id. btn_reply) ;
btn_send = ( Button) findViewById ( R. id. btn_send) ;
btn_contact. setOnClickListener ( this ) ;
btn_reply. setOnClickListener ( this ) ;
btn_send. setOnClickListener ( this ) ;
}
@Override
public void onClick ( View v) {
int viewId = v. getId ( ) ;
if ( viewId == btn_contact. getId ( ) ) {
Intent intent = new Intent ( getApplicationContext ( ) , ContactActivity. class ) ;
startActivityForResult ( intent, 11 ) ;
} else if ( viewId == btn_reply. getId ( ) ) {
Intent intent = new Intent ( getApplicationContext ( ) , ReplyActivity. class ) ;
startActivityForResult ( intent, 12 ) ;
} else if ( viewId == btn_send. getId ( ) ) {
SmsManager smsManager = SmsManager. getDefault ( ) ;
String destinationAddress = et_number. getText ( ) . toString ( ) . trim ( ) ;
String scAddress = "" ;
String text = et_content. getText ( ) . toString ( ) . trim ( ) ;
PendingIntent sentIntent = null;
PendingIntent deliveryIntent = null;
smsManager. sendTextMessage ( destinationAddress, scAddress, text, sentIntent, deliveryIntent) ;
}
}
@Override
protected void onActivityResult ( int requestCode, int resultCode, Intent data) {
super . onActivityResult ( requestCode, resultCode, data) ;
if ( data == null) {
return ;
}
if ( requestCode == 11 ) {
String number = data. getStringExtra ( "number" ) ;
et_number. setText ( number) ;
} else if ( requestCode == 12 ) {
String sms = data. getStringExtra ( "sms" ) ;
et_content. setText ( sms) ;
}
}
}
public class ContactActivity extends Activity {
private List< Contact> list = new ArrayList < Contact> ( ) ;
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_contact) ;
Contact contact = null;
for ( int i = 0 ; i < 20 ; i++ ) {
contact = new Contact ( ) ;
contact. name = "张三" + i;
contact. number = "1388888888" + i;
list. add ( contact) ;
}
ListView lv_contact = ( ListView) findViewById ( R. id. lv_contact) ;
MyAdapter myAdapter = new MyAdapter ( ) ;
lv_contact. setAdapter ( myAdapter) ;
lv_contact. setOnItemClickListener ( new OnItemClickListener ( ) {
@Override
public void onItemClick ( AdapterView< ? > parent, View view,
int position, long id) {
String number = list. get ( position) . number;
Intent intent = new Intent ( ) ;
intent. putExtra ( "number" , number) ;
setResult ( 2 , intent) ;
finish ( ) ;
}
} ) ;
}
@Override
public void onBackPressed ( ) {
super . onBackPressed ( ) ;
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount ( ) {
return list. size ( ) ;
}
@Override
public Object getItem ( int position) {
return list. get ( position) ;
}
@Override
public long getItemId ( int position) {
return position;
}
@Override
public View getView ( int position, View convertView, ViewGroup parent) {
View view = null;
if ( convertView == null) {
view = View. inflate ( getApplicationContext ( ) , R. layout. item_contact, null) ;
} else {
view = convertView;
}
TextView tv_name = ( TextView) view. findViewById ( R. id. tv_name) ;
TextView tv_number = ( TextView) view. findViewById ( R. id. tv_number) ;
Contact contact = list. get ( position) ;
tv_name. setText ( contact. name) ;
tv_number. setText ( contact. number) ;
return view;
}
}
}
public class ReplyActivity extends Activity {
private String[ ] smss = { "我在写作业" , "我在打游戏" , "我在吃饭" ,
"我在上网" , "我在购物" } ;
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_reply) ;
ListView lv_reply = ( ListView) findViewById ( R. id. lv_reply) ;
ArrayAdapter< String> adapter = new ArrayAdapter < String> ( getApplicationContext ( ) , R. layout. item_reply, smss) ;
lv_reply. setAdapter ( adapter) ;
lv_reply. setOnItemClickListener ( new OnItemClickListener ( ) {
@Override
public void onItemClick ( AdapterView< ? > parent, View view,
int position, long id) {
String sms = smss[ position] ;
Intent intent = new Intent ( ) ;
intent. putExtra ( "sms" , sms) ;
setResult ( 1 , intent) ;
finish ( ) ;
}
} ) ;
}
}
8.Activity的四种状态
1:处于前台的状态,可见,而且可以和用户进行交互。
2:初于暂停状态,可见,但是不能被操作,透明的。
3:停止状态,不可见,也不能被操作。
4:销毁状态,activity被系统杀死,或者调用finish方法退出。
9.Activity状态对应的方法
1:onCreate,当Activity被创建的时候,调用这个方法。
2:onstart,走完这个方法,Activity可以被用户所看到。
3:onResume,执行完这个方法,Activity处于前台状态,可见、可操作。可以用这个方法加载数据。
4:onPause,执行完这个方法,Activity处于暂停状态(系统内存不足时进行销毁),可见、但不可操作。
5:onStop,执行完这个方法,Activity处于停止状态(系统内存需要被使用时进行销毁),不可见、不可操作。可以在这个方法中停止所有的关于刷新界面的操作。
6:onDestory,执行玩这个方法,Activity就会被系统销毁。可以在这个方法中释放资源。
7:从onStop到onResume状态时,会调用onRestart、onStart、onResume方法。
10.Activity任务栈
1:Activity使用栈的结构来保存Activity实例。
2:我们可以通过sdk提供的工具,来查看这个栈。这个工具的目录时,sdk/tools/hierarchyviewer.bat。
3:Activity的栈有四种状态,可以通过清单文件AndroidManifest.xml的<activity android:name="com.my.androidpro22.ContactActivity" android:launchMode="standard"></activity>进行配置。
4:launchMode启动模式有四种状态,standard,标准模式,也是默认模式。每次调用startActivity或者startActivityForResult就会创建一个Activity实例。
5:singleTop,如果这个实例在栈顶,要进行实例的创建,并不会成功,在栈顶时单例模式。
6:singleTask,在任务找中只有一个实例。如果栈中已经存在了Activity,那么再次使用这个Activity,不会创建新的实例。而是将栈中这个Activity上面的所有的Activity关闭,使得这个Activity处于栈顶。
7:singleInstan,当前设备中只有一个实例,并且这个实例使用单独的栈进行存储。这个实例会永远在最后进行关闭。
11.屏幕旋转时Activity的生命周期
1:屏幕旋转时,默认会先销毁,在创建新的Activity。
2:如果不想时用默认的,可以写死旋转的方向。