Activity 的四种状态
运行状态
暂停状态 (一般是弹出对话框时)
停止状态
销毁状态
Activity的什么周期
启动过程onCreat->onStart->onResume运行(可见)->按返回时调用onPause进入暂停状态->onstop停止activity->onDestroy销毁activity
如何在主Activity前面添加启动界面?
在Manifest.xml中 将activity android:name="要启动的activity”
创建Activity
1、创建继承自Activity
新建class
public class detailActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//2、重写需要的回调方法
setContentView(R.layout.activity_main);//3、设置要显示的视图
}
}
2、在配置文件中配置activity
也可以通过android studio提供的向导来方便的创建activity
右键->new->activity
启动和关闭Activity
新创建的activity需要启动才能显示在屏幕上
1、可以作为入口activity(程序中只有一个activity时)
在AndroidManifest.xml中
activity需要通过intent来表达自己的“想法”
2、其他activity(多个activity时,需要在JAVA中启动)
如单击按钮,启动新建的activity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bnt = (Button) findViewById(R.id.bnt1);
bnt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,detailActivity.class);
startActivity(intent);//启动activity
}
});
}
}
关闭activity
finish();
单击按钮,关闭当前activity
public class detailActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Button button = (Button) findViewById(R.id.cls_bnt);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}
小技巧刷新activity
onCreate(null);
Activity之间数据交互Bundle
bundle是键值对的组合,可以将数据以键值对的形式保存
数据->存入Bundle->putExtras()方法把携带的数据保存在Intent中->startActivity启动另一个activity
1、MainActivity中存入数据
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bnt = (Button) findViewById(R.id.bnt1);
bnt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = ((EditText)findViewById(R.id.edtTxt)).getText().toString();//获取输入的内容
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
Bundle bundle = new Bundle();
bundle.putCharSequence("datax",str);//数据存入
intent.putExtras(bundle);//bundle存入intent
startActivity(intent);//启动activity
}
});
}
}
2、在新的Activity中调用数据
public class Main2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Button button = (Button) findViewById(R.id.cls_bnt);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
Intent intent = getIntent();//获取intent
Bundle bundle = intent.getExtras();
String str = bundle.getString("datax");//获取bundle中的数据
TextView txt = findViewById(R.id.txt1);
txt.setText(str);//显示输入的数据
}
}
调用另一个Activity并返回结果
使用startActivityForResult();而不是startActivity()启动另一个activity
实现选择头像功能
首先在MainActivity中创建ImageView和button
MainActivity中打开新的activity
public class MainActivity extends AppCompatActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {//获取选择结果并显示
super.onActivityResult(requestCode, resultCode, data);
if ((requestCode == 0x12)&&(resultCode == 0x12)){
Bundle bundle = data.getExtras();//
int imageId = bundle.getInt("imageid");
ImageView imageView = (ImageView)findViewById(R.id.imgV);
imageView.setImageResource(imageId);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bnt = (Button) findViewById(R.id.bnt1);
bnt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivityForResult(intent,0x12);//打开新的Activity并设置请求id
}
});
}
}
在另一个activity的xml中创建GridView
设置GridView要显示的内容,并监听点击事件
public class Main2Activity extends AppCompatActivity {
private int[] pic = new int[] {R.mipmap.img1,R.mipmap.img2,R.mipmap.img3,R.mipmap.img4,R.mipmap.img5,R.mipmap.img6};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
GridView gv = (GridView) findViewById(R.id.gridV);
List<Map<String,Object>> listitem = new ArrayList<Map<String, Object>>();
for (int i = 0;i<pic.length;i++)
{
Map<String,Object> map = new HashMap<String ,Object>();//定义map对象
map.put("image",pic[i]);//将图片添加到map中
listitem.add(map);//将map添加到list中
}
//参数:上下文对象,list对象,布局文件控制图片显示,字符串数组指定map中的key,整形数组指定布局文件中组件id
SimpleAdapter simpleAdapter = new SimpleAdapter(this,listitem,R.layout.cell,new String[]{"image"},new int[]{R.id.cellimgV});
gv.setAdapter(simpleAdapter);
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {//获取选中的图像
Intent intent = getIntent();
Bundle bundle = new Bundle();
bundle.putInt("imageid",pic[position]);//position 为当前保存的图像
intent.putExtras(bundle);
setResult(0x12,intent);//设置返回码,与启动activity时的请求码时一致的
finish();
}
});
}
}
最后在MainActivity中获取Intent中存放的数据,并显示。