Activity学习笔记
1 概念
Activity其实就是窗口(Window)
文档地址: http://developer.android.com/reference/android/app/Activity.html
2 生命周期
生命周期图: 出自Android.app.Activity
运行(Running)就是窗口在前端,暂停( Pause)就是窗口部分被遮盖失去了焦点,停止( Stop)就是窗口完全看不见了.销毁(Destory)就是窗口被从内存中清除了.
启动时执行 onCreate onStart onResume 三个方法
被部分遮蔽时 执行 onPause 方法 重新回到前台 onResume方法
完全看不到(如按HOME) 时,执行onPause onStop方法, 回到前台执行onStart onResume方法
被销毁时(如按返回键) 执行 onPause onStop onDestory .
3 操作Activity
AndroidManifest.xml中的Application下 android:theme可以操作主题
android:theme="@android:style/Theme.NoTitleBar" 表示一个没有标题栏
android:theme="@android:style/Theme.Translucent.NoTitleBar" 表示一个透明无标题的应用
4 启动Activity
首先每个要启动的Activity都必须写进AndroidManifest文件中,
在Appication结点下建一个 <activity android:name="Act01"></activity> 写上类名就行了
其次启动使用Context方法中的startActivity(Intent i)方法,由于 Activity就是一个Context所以可以直接用,不必写对象.
还需要一个描述要启动的应用的Intent.
代码如下:
Intent intent = new Intent(MainActivity.this, Act01.class);
startActivity(intent);
Intent构造函数的第一个参数是一个Context,第二个是要启动的Activity类.
由于这两行是在点击按钮动作中写的,所在的是一个点击按钮动作的匿名类,所以不能直接用this.
5 关闭Activity
调用finish() 方法
6 Activity的数据传递
6.1 传递数据
Intent intent = new Intent(MainActivity.this, Act01.class);
intent.putExtra("key", "hello aty01");
startActivity(intent);
想传递比较复杂的数据类型 可以传递 Bundle ,相当于将一系列数据打包
Bundle bundle = new Bundle();
int[] array01 = { 1, 2, 3, 4 };
int[] array02 = { 4, 3, 2, 1 };
bundle.putIntArray("array01", array01);
bundle.putIntArray("array02", array02);
intent.putExtra("bundle", bundle);
相当与传递了一个包含两个数组的结构体
6.2 取得数据
Intent intent = getIntent(); // 得到与这个Activity关联的Intent
String str = intent.getStringExtra("key");
Bundle data = getIntent().getBundleExtra("bundle");
int array01[] = data.getIntArray("array01");
int array02[] = data.getIntArray("array02");
6.3 取得第二个Activity传回的数据
1 只能使用startActivityForResult()启动第二个Activity
startActivityForResult(intent, 0); 多了一个请求码
2 第二个Activity在finish前要设置好返回值
Intent data = new Intent();
data.putExtra("result", "abc");
setResult(1, data);
finish();
3 第一个Activity中重写 onActivityResult 来获取数据
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
String str = data.getStringExtra("result");
System.out.println(resultCode + " " + str);
}
结束
=========================================
程序:
MainActivity
package cn.zyh.activity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity
{
private Button btnStartAty1;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");
// 先有setContentView将Activity和布局绑定,才能findViewById
btnStartAty1 = (Button) findViewById(R.id.btn01);
btnStartAty1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(MainActivity.this, Act01.class);
intent.putExtra("key", "hello aty01");
// 添加复杂的数据 通过bundle完成
Bundle bundle = new Bundle();
int[] array01 = { 1, 2, 3, 4 };
int[] array02 = { 4, 3, 2, 1 };
bundle.putIntArray("array01", array01);
bundle.putIntArray("array02", array02);
intent.putExtra("bundle", bundle);
// startActivity(intent);
startActivityForResult(intent, 0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
String str = data.getStringExtra("result");
System.out.println(resultCode + " " + str);
}
@Override
protected void onStart()
{
super.onStart();
System.out.println("onStart");
}
@Override
protected void onResume()
{
super.onResume();
System.out.println("onResume");
}
@Override
protected void onPause()
{
super.onPause();
System.out.println("onPause");
}
@Override
protected void onStop()
{
super.onStop();
System.out.println("onStop");
}
@Override
protected void onDestroy()
{
super.onDestroy();
System.out.println("onDestory");
}
@Override
protected void onRestart()
{
super.onRestart();
System.out.println("onRestart");
}
}
Act01
package cn.zyh.activity;
import java.util.Arrays;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Act01 extends Activity
{
private Button btnClose;
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.act01);
btnClose = (Button) findViewById(R.id.btn02);
btnClose.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent data = new Intent();
data.putExtra("result", "abc");
setResult(1, data);
finish();
}
});
tv = (TextView) findViewById(R.id.tv);
Intent intent = getIntent(); // 得到与这个Activity关联的Intent
String str = intent.getStringExtra("key");
Bundle data = getIntent().getBundleExtra("bundle");
int array01[] = data.getIntArray("array01");
int array02[] = data.getIntArray("array02");
str += (" " + Arrays.toString(array01) + " " + Arrays.toString(array02));
tv.setText(str);
}
}