Android入门 ——四大组件Activity(1)

 /**

 * 继承于Activity 就是一个Android app UI界面类    
 *
 */

  public class MainActivity extends Activity {

protected void onCreate(Bundle saveInstanceState){

super.onCreate(savedInstanceState);
// setContentView 利用该方法在界面生成的时候绑定xml布局
setContentView(R.layout.activity_main);

...

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
                   

public void myclick(View v) {

...//加入监听事件

}


}





1. setContentView(R.id.first_layout) 加载布局


2. AndroidManifest中注册活动:<application>标签中
<activity
android:name=".FirstActivity"
android:label="This is FirstActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>


3. 活动中Menu使用:
(1)重写onCreateOptionsMenu()方法
public boolean onCreateOptionsMenu(Menu menu){


getMenuInflater().inflat(R.menu.main,menu);
return true;


}


(2)创建菜单的响应事件 :重写onOptionsItemSelected()


public boolean onOptionsSelected(){
switch(item.getItemId()){
case R.id.add_item:
Toast.makeText().show;
break;
...
default:
   }
return true;
}






4. 显式intent
首先new一个intent,然后传入两个参数,一个是上下文,一个是启动的目标活动或者服务或者广播
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
}
});










5. 隐式intent
在intent-filter中配置action和category
(1)<activity android:name=".SecondActivity" >
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>
</activity>


button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
}
});




(2)调用浏览器
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});


(3)调用拨号
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}
});
 (4) 传递数据


FirstActivity中代码
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
}
});


SecondActivity中接收数据代码
public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.second_layout);
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity", data);
}
}




(5)返回数据到上一个活动:用 startActivityForResult()这个方法启动活动
button1的点击事件:
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
}
});


button2的点击事件:
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();
}
});


当SecondActivity活动销毁后会回调上一个活动的 onActivityResult()这个函数,
因此我们需要再FirstActivity中重写这个方法;


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnedData);
}
break;
default:
}
}


onActivityResult()中传入三个参数。第一个是启动活动时候的请求码,第二个是返回数据时
传入的处理结果,第三个参数是返回数据的intent。


要是用户在SecondActivity中是通过返回键来返回到上一个活动的话。我们需要重写onBackPressed()
这个方法:
@Override
public void onBackPressed() {
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();
}




6.Activity的生命周期
返回栈:
android 使用 Task来管理活动,一个Task就是 一组存放在栈里的活动集合。
这个栈称为返回栈。栈是一种后进先出的数据结构。一般情况下。新启动的
活动,就入栈处于栈顶的位置;调用finish()或者按下返回键的话,栈顶
的活动就出栈。


 
活动状态:每个活动在生命周期中最多只有四种生命状态。


(1)运行状态  处于栈顶的活动就是运行状态


(2)暂停状态  当一个活动不处于栈顶,仍然可见的时候就是暂停状态,暂停状态的活动仍然是存活的,只有在内存极低的情况下,系统才会考虑回收 这种活动
            
(3)停止状态  当活动不处于栈顶,也不可见的时候就进入了停止状态。系统会仍然 为这种活动保存相应的状态和成员变量,其他活动需要内存的时候,停止状态的活动有可能会被回收。


(4)销毁状态 当一个活动从返回栈的移除的时候就是销毁状态。系统最倾向于回收销毁状态的活动以保证手机内存的充足




活动的生命周期:Activity类中定义了七个回调方法,覆盖了生命周期的没一个环节


(1)onCreate()
(2)onStar()
(3)onResume()
(4)onPause()
(5)onStop()
(6)onDestroy()
(7)onRestar()


7.活动的四种启动模式
(1)standard模式:这是一种系统默认的模式
(2)singleTop模式:在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用
     它,不会再创建新的活动实例
(3)singleTask:每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例
(4)singleInstance:启用一个新的单独的返回栈来管理这个活动


8.获取当前界面的活动
   新建一个类BaseActivity继承于Activity。然后重写onCreate()方法。
public class BaseActivity extends Activity {
@Override
   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
            Log.d("BaseActivity", getClass().getSimpleName());
}
}
    然后让该类成为项目中所有活动的父类。


9.随时随地退出程序:用一个专门的集合类来管理所有的活动。
新建类ActivityCollector代码:
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<Activity>();
public static void addActivity(Activity activity)
       {
activities.add(activity);
        }


public static void removeActivity(Activity activity) 
{
activities.remove(activity);
}
public static void finishAll() 
{
for (Activity activity : activities) 
{
if (!activity.isFinishing()) 
{
activity.finish();
}
}
}
}


10.总结:活动的基本用法,到启动活动和传递数据的方式,再到活动的生命周期,以及活
动的启动模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值